react-native-inapp-inspector 2.3.5 → 2.3.7
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/dist/commonjs/analytics.d.ts +0 -4
- package/dist/commonjs/analytics.js +0 -4
- package/dist/commonjs/bundle.d.ts +0 -4
- package/dist/commonjs/bundle.js +0 -4
- package/dist/commonjs/components/AnalyticsDetail.js +18 -27
- package/dist/commonjs/components/AnalyticsEventCard.js +9 -12
- package/dist/commonjs/components/AnalyticsGraph.js +10 -15
- package/dist/commonjs/components/AppHeaderLogo.js +0 -3
- package/dist/commonjs/components/BrandCircleIcon.js +15 -15
- package/dist/commonjs/components/BrandSquareIcon.js +20 -20
- package/dist/commonjs/components/CodeSnippet.js +6 -19
- package/dist/commonjs/components/ConsoleLogCard.js +0 -1
- package/dist/commonjs/components/CopyButton.js +0 -4
- package/dist/commonjs/components/DiffViewer.js +0 -2
- package/dist/commonjs/components/DomainHeader.js +0 -4
- package/dist/commonjs/components/EmptyState.js +0 -3
- package/dist/commonjs/components/ErrorBoundary.js +5 -10
- package/dist/commonjs/components/HeadersSection.js +0 -5
- package/dist/commonjs/components/HighlightText.js +1 -4
- package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +11 -26
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +34 -40
- package/dist/commonjs/components/Inspector/BundleTab.js +56 -84
- package/dist/commonjs/components/Inspector/ConsoleTab.js +7 -7
- package/dist/commonjs/components/Inspector/CrashDetail.js +18 -20
- package/dist/commonjs/components/Inspector/CrashFilterModal.js +0 -1
- package/dist/commonjs/components/Inspector/CrashTab.js +11 -20
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +12 -24
- package/dist/commonjs/components/Inspector/FabLauncher.js +1 -1
- package/dist/commonjs/components/Inspector/InspectorContext.js +0 -2
- package/dist/commonjs/components/Inspector/InspectorHeader.js +7 -8
- package/dist/commonjs/components/Inspector/LogDetail.js +27 -29
- package/dist/commonjs/components/Inspector/MainScreen.js +9 -10
- package/dist/commonjs/components/Inspector/NetworkDetail.js +10 -11
- package/dist/commonjs/components/Inspector/NetworkTab.js +14 -14
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +6 -9
- package/dist/commonjs/components/Inspector/PerformanceTab.js +30 -43
- package/dist/commonjs/components/Inspector/ReduxDetail.js +18 -34
- package/dist/commonjs/components/Inspector/ReduxTab.js +11 -20
- package/dist/commonjs/components/Inspector/SettingsPanel.js +32 -36
- package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +6 -6
- package/dist/commonjs/components/Inspector/StorageTab.js +14 -26
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -6
- package/dist/commonjs/components/JsonViewer.js +3 -10
- package/dist/commonjs/components/LogCard.js +7 -7
- package/dist/commonjs/components/MetaAccordion.js +1 -7
- package/dist/commonjs/components/NetworkIcons.js +12 -16
- package/dist/commonjs/components/SectionHeader.js +0 -4
- package/dist/commonjs/components/SkeletonPlaceholder.js +6 -6
- package/dist/commonjs/components/Slider.js +6 -6
- package/dist/commonjs/components/SourcePageCard.js +0 -4
- package/dist/commonjs/components/TreeNode.js +0 -4
- package/dist/commonjs/console.d.ts +0 -4
- package/dist/commonjs/console.js +0 -4
- package/dist/commonjs/constants/index.js +6 -9
- package/dist/commonjs/constants/telemetryConfig.d.ts +3 -0
- package/dist/commonjs/constants/telemetryConfig.js +6 -0
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -3
- package/dist/commonjs/crash.d.ts +0 -4
- package/dist/commonjs/crash.js +0 -4
- package/dist/commonjs/customHooks/analyticsLogger.d.ts +0 -7
- package/dist/commonjs/customHooks/analyticsLogger.js +3 -59
- package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -9
- package/dist/commonjs/customHooks/bundleAnalyzer.js +3 -86
- package/dist/commonjs/customHooks/consoleLogger.js +0 -16
- package/dist/commonjs/customHooks/crashHandler.d.ts +0 -28
- package/dist/commonjs/customHooks/crashHandler.js +0 -55
- package/dist/commonjs/customHooks/logFilters.d.ts +0 -4
- package/dist/commonjs/customHooks/logFilters.js +0 -11
- package/dist/commonjs/customHooks/networkLogger.js +2 -13
- package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -27
- package/dist/commonjs/customHooks/performanceTracker.js +0 -31
- package/dist/commonjs/customHooks/reduxLogger.d.ts +0 -12
- package/dist/commonjs/customHooks/reduxLogger.js +0 -51
- package/dist/commonjs/customHooks/storageInspector.d.ts +0 -40
- package/dist/commonjs/customHooks/storageInspector.js +1 -56
- package/dist/commonjs/decorators/index.d.ts +0 -37
- package/dist/commonjs/decorators/index.js +0 -42
- package/dist/commonjs/helpers/gaAnalyticsRegistry.d.ts +0 -10
- package/dist/commonjs/helpers/gaAnalyticsRegistry.js +0 -26
- package/dist/commonjs/helpers/index.d.ts +0 -7
- package/dist/commonjs/helpers/index.js +1 -42
- package/dist/commonjs/helpers/memoryManager.d.ts +0 -11
- package/dist/commonjs/helpers/memoryManager.js +0 -13
- package/dist/commonjs/helpers/searchQueryParser.d.ts +0 -4
- package/dist/commonjs/helpers/searchQueryParser.js +0 -18
- package/dist/commonjs/helpers/settingsStore.js +0 -8
- package/dist/commonjs/helpers/telemetry.d.ts +2 -0
- package/dist/commonjs/helpers/telemetry.js +136 -0
- package/dist/commonjs/i18n/index.d.ts +0 -9
- package/dist/commonjs/i18n/index.js +0 -15
- package/dist/commonjs/index.js +15 -97
- package/dist/commonjs/native/NativeInspector.d.ts +0 -54
- package/dist/commonjs/native/NativeInspector.js +0 -56
- package/dist/commonjs/network.d.ts +0 -4
- package/dist/commonjs/network.js +0 -4
- package/dist/commonjs/performance.d.ts +0 -4
- package/dist/commonjs/performance.js +0 -4
- package/dist/commonjs/redux.d.ts +0 -4
- package/dist/commonjs/redux.js +0 -4
- package/dist/commonjs/storage.d.ts +0 -4
- package/dist/commonjs/storage.js +0 -4
- package/dist/commonjs/styles/AppColors.d.ts +0 -3
- package/dist/commonjs/styles/AppColors.js +15 -30
- package/dist/commonjs/styles/AppFonts.d.ts +0 -4
- package/dist/commonjs/styles/AppFonts.js +0 -4
- package/dist/commonjs/styles/common.js +0 -11
- package/dist/commonjs/styles/index.js +0 -8
- package/dist/commonjs/types/enums.js +0 -3
- package/dist/commonjs/types/interfaces.d.ts +3 -3
- package/dist/esm/analytics.d.ts +0 -4
- package/dist/esm/analytics.js +0 -4
- package/dist/esm/bundle.d.ts +0 -4
- package/dist/esm/bundle.js +0 -4
- package/dist/esm/components/AnalyticsDetail.js +18 -27
- package/dist/esm/components/AnalyticsEventCard.js +9 -12
- package/dist/esm/components/AnalyticsGraph.js +10 -15
- package/dist/esm/components/AppHeaderLogo.js +0 -3
- package/dist/esm/components/BrandCircleIcon.js +15 -15
- package/dist/esm/components/BrandSquareIcon.js +20 -20
- package/dist/esm/components/CodeSnippet.js +6 -19
- package/dist/esm/components/ConsoleLogCard.js +0 -1
- package/dist/esm/components/CopyButton.js +0 -4
- package/dist/esm/components/DiffViewer.js +0 -2
- package/dist/esm/components/DomainHeader.js +0 -4
- package/dist/esm/components/EmptyState.js +0 -3
- package/dist/esm/components/ErrorBoundary.js +5 -10
- package/dist/esm/components/HeadersSection.js +0 -5
- package/dist/esm/components/HighlightText.js +1 -4
- package/dist/esm/components/Inspector/AnalyticsFilterModal.js +11 -26
- package/dist/esm/components/Inspector/AnalyticsTab.js +34 -40
- package/dist/esm/components/Inspector/BundleTab.js +56 -84
- package/dist/esm/components/Inspector/ConsoleTab.js +7 -7
- package/dist/esm/components/Inspector/CrashDetail.js +18 -20
- package/dist/esm/components/Inspector/CrashFilterModal.js +0 -1
- package/dist/esm/components/Inspector/CrashTab.js +11 -20
- package/dist/esm/components/Inspector/DeviceInfoTab.js +12 -24
- package/dist/esm/components/Inspector/FabLauncher.js +1 -1
- package/dist/esm/components/Inspector/InspectorContext.js +0 -2
- package/dist/esm/components/Inspector/InspectorHeader.js +7 -8
- package/dist/esm/components/Inspector/LogDetail.js +27 -29
- package/dist/esm/components/Inspector/MainScreen.js +9 -10
- package/dist/esm/components/Inspector/NetworkDetail.js +10 -11
- package/dist/esm/components/Inspector/NetworkTab.js +14 -14
- package/dist/esm/components/Inspector/NpmUpdateToast.js +6 -9
- package/dist/esm/components/Inspector/PerformanceTab.js +30 -43
- package/dist/esm/components/Inspector/ReduxDetail.js +18 -34
- package/dist/esm/components/Inspector/ReduxTab.js +11 -20
- package/dist/esm/components/Inspector/SettingsPanel.js +32 -36
- package/dist/esm/components/Inspector/SkeletonPlaceholder.js +6 -6
- package/dist/esm/components/Inspector/StorageTab.js +14 -26
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +5 -6
- package/dist/esm/components/JsonViewer.js +3 -10
- package/dist/esm/components/LogCard.js +7 -7
- package/dist/esm/components/MetaAccordion.js +1 -7
- package/dist/esm/components/NetworkIcons.js +12 -16
- package/dist/esm/components/SectionHeader.js +0 -4
- package/dist/esm/components/SkeletonPlaceholder.js +6 -6
- package/dist/esm/components/Slider.js +6 -6
- package/dist/esm/components/SourcePageCard.js +0 -4
- package/dist/esm/components/TreeNode.js +0 -4
- package/dist/esm/console.d.ts +0 -4
- package/dist/esm/console.js +0 -4
- package/dist/esm/constants/index.js +6 -9
- package/dist/esm/constants/telemetryConfig.d.ts +3 -0
- package/dist/esm/constants/telemetryConfig.js +3 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -3
- package/dist/esm/crash.d.ts +0 -4
- package/dist/esm/crash.js +0 -4
- package/dist/esm/customHooks/analyticsLogger.d.ts +0 -7
- package/dist/esm/customHooks/analyticsLogger.js +3 -59
- package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -9
- package/dist/esm/customHooks/bundleAnalyzer.js +3 -86
- package/dist/esm/customHooks/consoleLogger.js +0 -16
- package/dist/esm/customHooks/crashHandler.d.ts +0 -28
- package/dist/esm/customHooks/crashHandler.js +0 -55
- package/dist/esm/customHooks/logFilters.d.ts +0 -4
- package/dist/esm/customHooks/logFilters.js +0 -11
- package/dist/esm/customHooks/networkLogger.js +2 -13
- package/dist/esm/customHooks/performanceTracker.d.ts +0 -27
- package/dist/esm/customHooks/performanceTracker.js +0 -31
- package/dist/esm/customHooks/reduxLogger.d.ts +0 -12
- package/dist/esm/customHooks/reduxLogger.js +0 -51
- package/dist/esm/customHooks/storageInspector.d.ts +0 -40
- package/dist/esm/customHooks/storageInspector.js +1 -56
- package/dist/esm/decorators/index.d.ts +0 -37
- package/dist/esm/decorators/index.js +0 -42
- package/dist/esm/helpers/gaAnalyticsRegistry.d.ts +0 -10
- package/dist/esm/helpers/gaAnalyticsRegistry.js +0 -26
- package/dist/esm/helpers/index.d.ts +0 -7
- package/dist/esm/helpers/index.js +1 -42
- package/dist/esm/helpers/memoryManager.d.ts +0 -11
- package/dist/esm/helpers/memoryManager.js +0 -13
- package/dist/esm/helpers/searchQueryParser.d.ts +0 -4
- package/dist/esm/helpers/searchQueryParser.js +0 -18
- package/dist/esm/helpers/settingsStore.js +0 -8
- package/dist/esm/helpers/telemetry.d.ts +2 -0
- package/dist/esm/helpers/telemetry.js +132 -0
- package/dist/esm/i18n/index.d.ts +0 -9
- package/dist/esm/i18n/index.js +0 -15
- package/dist/esm/index.js +15 -97
- package/dist/esm/native/NativeInspector.d.ts +0 -54
- package/dist/esm/native/NativeInspector.js +0 -56
- package/dist/esm/network.d.ts +0 -4
- package/dist/esm/network.js +0 -4
- package/dist/esm/performance.d.ts +0 -4
- package/dist/esm/performance.js +0 -4
- package/dist/esm/redux.d.ts +0 -4
- package/dist/esm/redux.js +0 -4
- package/dist/esm/storage.d.ts +0 -4
- package/dist/esm/storage.js +0 -4
- package/dist/esm/styles/AppColors.d.ts +0 -3
- package/dist/esm/styles/AppColors.js +15 -30
- package/dist/esm/styles/AppFonts.d.ts +0 -4
- package/dist/esm/styles/AppFonts.js +0 -4
- package/dist/esm/styles/common.js +0 -11
- package/dist/esm/styles/index.js +0 -8
- package/dist/esm/types/enums.js +0 -3
- package/dist/esm/types/interfaces.d.ts +3 -3
- package/package.json +2 -2
- package/src/constants/telemetryConfig.ts +6 -0
- package/src/constants/version.ts +1 -1
- package/src/helpers/telemetry.ts +161 -0
- package/src/index.tsx +15 -1
- package/src/types/interfaces.ts +3 -0
|
@@ -52,7 +52,6 @@ const performanceTracker_1 = require("../../customHooks/performanceTracker");
|
|
|
52
52
|
const NativeInspector_1 = require("../../native/NativeInspector");
|
|
53
53
|
const PerformanceTab = react_1.default.memo(() => {
|
|
54
54
|
const { t } = (0, i18n_1.useTranslation)();
|
|
55
|
-
// ─── Real-Time FPS Tracking ────────────────────────────────────────────────
|
|
56
55
|
const [isRecording, setIsRecording] = (0, react_1.useState)(true);
|
|
57
56
|
const [currentFps, setCurrentFps] = (0, react_1.useState)(60);
|
|
58
57
|
const [minFps, setMinFps] = (0, react_1.useState)(57);
|
|
@@ -61,7 +60,6 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
61
60
|
const [totalFrames, setTotalFrames] = (0, react_1.useState)(4820);
|
|
62
61
|
const [jankyFrameCount, setJankyFrameCount] = (0, react_1.useState)(4);
|
|
63
62
|
const [jsLagMs, setJsLagMs] = (0, react_1.useState)(1.2);
|
|
64
|
-
// Expanded Event Card IDs
|
|
65
63
|
const [expandedEventIds, setExpandedEventIds] = (0, react_1.useState)({
|
|
66
64
|
'perf-1': true,
|
|
67
65
|
});
|
|
@@ -71,11 +69,9 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
71
69
|
[id]: !prev[id],
|
|
72
70
|
}));
|
|
73
71
|
};
|
|
74
|
-
// FPS history for sparkline
|
|
75
72
|
const [fpsHistory, setFpsHistory] = (0, react_1.useState)([
|
|
76
73
|
60, 59, 60, 60, 58, 60, 59, 60, 60, 60, 57, 60, 59, 60, 60, 58, 60, 60, 59, 60,
|
|
77
74
|
]);
|
|
78
|
-
// Performance Log Events (Dynamic live subscription)
|
|
79
75
|
const [events, setEvents] = (0, react_1.useState)(() => (0, performanceTracker_1.getPerformanceEvents)());
|
|
80
76
|
const [filterCategory, setFilterCategory] = (0, react_1.useState)('ALL');
|
|
81
77
|
const [search, setSearch] = (0, react_1.useState)('');
|
|
@@ -85,7 +81,6 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
85
81
|
});
|
|
86
82
|
return unsub;
|
|
87
83
|
}, []);
|
|
88
|
-
// ─── Live Frame Measurement Loop (1-Second Batch Interval) ────────────────
|
|
89
84
|
const lastFrameTimeRef = (0, react_1.useRef)(Date.now());
|
|
90
85
|
const rafIdRef = (0, react_1.useRef)(null);
|
|
91
86
|
const [systemMetrics, setSystemMetrics] = (0, react_1.useState)(null);
|
|
@@ -125,13 +120,11 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
125
120
|
const now = Date.now();
|
|
126
121
|
const delta = now - lastFrameTimeRef.current;
|
|
127
122
|
lastFrameTimeRef.current = now;
|
|
128
|
-
// Track peak JS event loop lag during this 1s interval (without triggering re-renders)
|
|
129
123
|
const lag = Math.max(0, delta - 16.67);
|
|
130
124
|
if (lag > maxLagInSecond) {
|
|
131
125
|
maxLagInSecond = lag;
|
|
132
126
|
}
|
|
133
127
|
frameCount++;
|
|
134
|
-
// Update React state ONCE every 1 second (1000ms) to prevent UI shaking/re-rendering
|
|
135
128
|
if (now - lastSecond >= 1000) {
|
|
136
129
|
const elapsed = now - lastSecond;
|
|
137
130
|
let measuredFps = Math.min(120, Math.max(0, Math.round((frameCount * 1000) / elapsed)));
|
|
@@ -158,7 +151,6 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
158
151
|
setAvgFps(Math.round(sum / next.length));
|
|
159
152
|
return next;
|
|
160
153
|
});
|
|
161
|
-
// Trigger log if noticeable frame drop
|
|
162
154
|
if (measuredFps < 50) {
|
|
163
155
|
const durationStr = (1000 / measuredFps).toFixed(1);
|
|
164
156
|
(0, performanceTracker_1.logPerformanceEvent)({
|
|
@@ -191,7 +183,6 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
191
183
|
cancelAnimationFrame(rafIdRef.current);
|
|
192
184
|
};
|
|
193
185
|
}, [isRecording]);
|
|
194
|
-
// Filtered Events
|
|
195
186
|
const filteredEvents = (0, react_1.useMemo)(() => {
|
|
196
187
|
return events.filter(e => {
|
|
197
188
|
const matchSearch = !search ||
|
|
@@ -212,7 +203,6 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
212
203
|
return matchSearch && matchFilter;
|
|
213
204
|
});
|
|
214
205
|
}, [events, search, filterCategory]);
|
|
215
|
-
// Overall Performance Score
|
|
216
206
|
const performanceScore = (0, react_1.useMemo)(() => {
|
|
217
207
|
if (avgFps >= 58) {
|
|
218
208
|
return {
|
|
@@ -237,7 +227,6 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
237
227
|
bg: AppColors_1.AppColors.errorCardBg,
|
|
238
228
|
};
|
|
239
229
|
}, [avgFps, t]);
|
|
240
|
-
// ─── Dynamic Runtime Environment & Engine Diagnostics ──────────────────────
|
|
241
230
|
const runtimeDiagnostics = (0, react_1.useMemo)(() => {
|
|
242
231
|
const raw = (0, helpers_1.getRuntimeDiagnostics)();
|
|
243
232
|
const engineNameMap = {
|
|
@@ -267,7 +256,6 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
267
256
|
totalAllocMb: raw.totalAllocMb,
|
|
268
257
|
};
|
|
269
258
|
}, [t]);
|
|
270
|
-
// ─── Dynamic 16.67ms Frame Budget Utilization ─────────────────────────────
|
|
271
259
|
const frameBudgetStats = (0, react_1.useMemo)(() => {
|
|
272
260
|
const frameDuration = avgFps > 0 ? 1000 / avgFps : 16.67;
|
|
273
261
|
const jsTime = Number(Math.max(1.0, Math.min(frameDuration * 0.45, 2.0 + jsLagMs)).toFixed(1));
|
|
@@ -284,7 +272,6 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
284
272
|
headroomPercent,
|
|
285
273
|
};
|
|
286
274
|
}, [avgFps, jsLagMs]);
|
|
287
|
-
// ─── Dynamic SVG FPS Area & Trend Curve Data ────────────────────────────
|
|
288
275
|
const [selectedFpsPointIdx, setSelectedFpsPointIdx] = (0, react_1.useState)(null);
|
|
289
276
|
const svgGraphWidth = 320;
|
|
290
277
|
const svgGraphHeight = 64;
|
|
@@ -367,7 +354,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
367
354
|
? fpsGraphData.coords[selectedFpsPointIdx]
|
|
368
355
|
: null;
|
|
369
356
|
return (<react_native_1.View style={perfStyles.container}>
|
|
370
|
-
|
|
357
|
+
|
|
371
358
|
<react_native_1.View style={perfStyles.headerBar}>
|
|
372
359
|
<react_native_1.View style={perfStyles.searchBox}>
|
|
373
360
|
<NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={15}/>
|
|
@@ -377,7 +364,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
377
364
|
</TouchableScale_1.default>) : null}
|
|
378
365
|
</react_native_1.View>
|
|
379
366
|
|
|
380
|
-
|
|
367
|
+
|
|
381
368
|
<TouchableScale_1.default onPress={() => setIsRecording(prev => !prev)} style={[
|
|
382
369
|
perfStyles.recordToggleBtn,
|
|
383
370
|
isRecording
|
|
@@ -407,7 +394,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
407
394
|
</TouchableScale_1.default>
|
|
408
395
|
</react_native_1.View>
|
|
409
396
|
|
|
410
|
-
|
|
397
|
+
|
|
411
398
|
<react_native_1.View style={perfStyles.categoryScrollWrapper}>
|
|
412
399
|
<react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} style={perfStyles.categoryScrollView} contentContainerStyle={perfStyles.categoryScroll}>
|
|
413
400
|
{[
|
|
@@ -461,9 +448,9 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
461
448
|
</react_native_1.ScrollView>
|
|
462
449
|
</react_native_1.View>
|
|
463
450
|
|
|
464
|
-
|
|
451
|
+
|
|
465
452
|
<react_native_1.ScrollView style={perfStyles.scrollBody} contentContainerStyle={perfStyles.scrollContent} showsVerticalScrollIndicator={false}>
|
|
466
|
-
|
|
453
|
+
|
|
467
454
|
<react_native_1.View style={perfStyles.heroCard}>
|
|
468
455
|
<react_native_1.View style={perfStyles.heroHeaderRow}>
|
|
469
456
|
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
@@ -478,7 +465,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
478
465
|
</react_native_1.View>
|
|
479
466
|
</react_native_1.View>
|
|
480
467
|
|
|
481
|
-
|
|
468
|
+
|
|
482
469
|
<react_native_1.View style={[
|
|
483
470
|
perfStyles.scorePill,
|
|
484
471
|
{ backgroundColor: performanceScore.bg },
|
|
@@ -492,7 +479,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
492
479
|
</react_native_1.View>
|
|
493
480
|
</react_native_1.View>
|
|
494
481
|
|
|
495
|
-
|
|
482
|
+
|
|
496
483
|
<react_native_1.View style={perfStyles.primaryFpsRow}>
|
|
497
484
|
<react_native_1.View style={perfStyles.fpsBigNumberBox}>
|
|
498
485
|
<react_native_1.Text style={[
|
|
@@ -553,7 +540,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
553
540
|
</react_native_1.View>
|
|
554
541
|
</react_native_1.View>
|
|
555
542
|
|
|
556
|
-
|
|
543
|
+
|
|
557
544
|
{activeScrubPoint && (<react_native_1.View style={perfStyles.graphScrubTooltip}>
|
|
558
545
|
<react_native_1.Text style={perfStyles.graphScrubTooltipText}>
|
|
559
546
|
{activeScrubPoint.val} FPS •{' '}
|
|
@@ -562,7 +549,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
562
549
|
</react_native_1.Text>
|
|
563
550
|
</react_native_1.View>)}
|
|
564
551
|
|
|
565
|
-
|
|
552
|
+
|
|
566
553
|
<react_native_1.View style={perfStyles.svgGraphContainer}>
|
|
567
554
|
<react_native_svg_1.default width="100%" height={svgGraphHeight} viewBox={`0 0 ${svgGraphWidth} ${svgGraphHeight}`} preserveAspectRatio="none">
|
|
568
555
|
<react_native_svg_1.Defs>
|
|
@@ -580,23 +567,23 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
580
567
|
</react_native_svg_1.LinearGradient>
|
|
581
568
|
</react_native_svg_1.Defs>
|
|
582
569
|
|
|
583
|
-
|
|
570
|
+
|
|
584
571
|
<react_native_svg_1.Line x1="0" y1="7" x2={svgGraphWidth} y2="7" stroke={AppColors_1.AppColors.emerald500} strokeWidth="1" strokeDasharray="4,4" opacity="0.4"/>
|
|
585
572
|
|
|
586
|
-
|
|
573
|
+
|
|
587
574
|
<react_native_svg_1.Line x1="0" y1={svgGraphHeight / 2} x2={svgGraphWidth} y2={svgGraphHeight / 2} stroke={AppColors_1.AppColors.amber500} strokeWidth="0.8" strokeDasharray="3,3" opacity="0.3"/>
|
|
588
575
|
|
|
589
|
-
|
|
576
|
+
|
|
590
577
|
{fpsGraphData.areaPath ? (<react_native_svg_1.Path d={fpsGraphData.areaPath} fill="url(#fpsAreaGradient)"/>) : null}
|
|
591
578
|
|
|
592
|
-
|
|
579
|
+
|
|
593
580
|
{fpsGraphData.linePath ? (<react_native_svg_1.Path d={fpsGraphData.linePath} fill="none" stroke={avgFps >= 55
|
|
594
581
|
? AppColors_1.AppColors.emerald600
|
|
595
582
|
: avgFps >= 40
|
|
596
583
|
? AppColors_1.AppColors.amber600
|
|
597
584
|
: AppColors_1.AppColors.errorColor} strokeWidth="2.2"/>) : null}
|
|
598
585
|
|
|
599
|
-
|
|
586
|
+
|
|
600
587
|
{fpsGraphData.coords.map((c, idx) => {
|
|
601
588
|
const isSelected = selectedFpsPointIdx === idx;
|
|
602
589
|
const isDip = c.val < 50;
|
|
@@ -611,7 +598,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
611
598
|
})}
|
|
612
599
|
</react_native_svg_1.default>
|
|
613
600
|
|
|
614
|
-
|
|
601
|
+
|
|
615
602
|
<react_native_1.View style={perfStyles.svgTouchOverlay}>
|
|
616
603
|
{fpsGraphData.coords.map((_, idx) => (<react_native_1.TouchableOpacity key={idx} style={perfStyles.svgTouchCol} activeOpacity={0.7} onPress={() => setSelectedFpsPointIdx(selectedFpsPointIdx === idx ? null : idx)}/>))}
|
|
617
604
|
</react_native_1.View>
|
|
@@ -627,7 +614,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
627
614
|
</react_native_1.View>
|
|
628
615
|
</react_native_1.View>
|
|
629
616
|
|
|
630
|
-
|
|
617
|
+
|
|
631
618
|
<react_native_1.View style={perfStyles.budgetCard}>
|
|
632
619
|
<react_native_1.View style={perfStyles.budgetHeader}>
|
|
633
620
|
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
|
|
@@ -684,7 +671,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
684
671
|
</react_native_1.View>
|
|
685
672
|
</react_native_1.View>
|
|
686
673
|
|
|
687
|
-
|
|
674
|
+
|
|
688
675
|
<react_native_1.View style={perfStyles.budgetCard}>
|
|
689
676
|
<react_native_1.View style={perfStyles.budgetHeader}>
|
|
690
677
|
<react_native_1.View>
|
|
@@ -731,7 +718,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
731
718
|
</react_native_1.View>
|
|
732
719
|
</react_native_1.View>
|
|
733
720
|
|
|
734
|
-
|
|
721
|
+
|
|
735
722
|
<react_native_1.View style={perfStyles.budgetCard}>
|
|
736
723
|
<react_native_1.View style={perfStyles.budgetHeader}>
|
|
737
724
|
<react_native_1.Text style={perfStyles.budgetTitle}>{t('performance.budgetUsage')}</react_native_1.Text>
|
|
@@ -743,7 +730,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
743
730
|
</react_native_1.Text>
|
|
744
731
|
</react_native_1.View>
|
|
745
732
|
|
|
746
|
-
|
|
733
|
+
|
|
747
734
|
<react_native_1.View style={perfStyles.budgetBarContainer}>
|
|
748
735
|
<react_native_1.View style={[
|
|
749
736
|
perfStyles.budgetBarSegment,
|
|
@@ -791,7 +778,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
791
778
|
</react_native_1.View>
|
|
792
779
|
</react_native_1.View>
|
|
793
780
|
|
|
794
|
-
|
|
781
|
+
|
|
795
782
|
<react_native_1.View style={perfStyles.engineSummaryGrid}>
|
|
796
783
|
<react_native_1.View style={perfStyles.engineSummaryCard}>
|
|
797
784
|
<react_native_1.Text style={perfStyles.engineSummaryLabel}>{t('performance.jsEngine')}</react_native_1.Text>
|
|
@@ -812,7 +799,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
812
799
|
</react_native_1.View>
|
|
813
800
|
</react_native_1.View>
|
|
814
801
|
|
|
815
|
-
|
|
802
|
+
|
|
816
803
|
<react_native_1.View style={perfStyles.logsHeaderRow}>
|
|
817
804
|
<react_native_1.Text style={perfStyles.logsSectionHeading}>
|
|
818
805
|
{t('performance.recordedEvents')} ({filteredEvents.length})
|
|
@@ -851,7 +838,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
851
838
|
</react_native_1.Text>
|
|
852
839
|
</react_native_1.View>
|
|
853
840
|
|
|
854
|
-
|
|
841
|
+
|
|
855
842
|
<react_native_1.View style={[
|
|
856
843
|
perfStyles.droppedBadge,
|
|
857
844
|
(event.droppedFrames ?? Math.max(0, 60 - event.fps)) > 0
|
|
@@ -870,7 +857,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
870
857
|
</react_native_1.Text>
|
|
871
858
|
</react_native_1.View>
|
|
872
859
|
|
|
873
|
-
|
|
860
|
+
|
|
874
861
|
{event.bottleneckThread && (<react_native_1.View style={[perfStyles.bottleneckTag, { flexDirection: 'row', alignItems: 'center', gap: 3 }]}>
|
|
875
862
|
{event.bottleneckThread === 'JS Thread' && (<NetworkIcons_1.BoltIcon size={10} color={AppColors_1.AppColors.warningIconGold}/>)}
|
|
876
863
|
<react_native_1.Text style={perfStyles.bottleneckTagText}>
|
|
@@ -889,7 +876,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
889
876
|
</react_native_1.View>
|
|
890
877
|
</react_native_1.View>
|
|
891
878
|
|
|
892
|
-
|
|
879
|
+
|
|
893
880
|
<react_native_1.View style={{ marginTop: 4 }}>
|
|
894
881
|
<HighlightText_1.default text={event.label} search={search} style={perfStyles.eventLabel} highlightStyle={perfStyles.searchHighlight}/>
|
|
895
882
|
<react_native_1.View style={perfStyles.eventMetaRow}>
|
|
@@ -914,7 +901,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
914
901
|
</react_native_1.View>
|
|
915
902
|
</react_native_1.View>
|
|
916
903
|
|
|
917
|
-
|
|
904
|
+
|
|
918
905
|
<react_native_1.View style={perfStyles.frameBarTrack}>
|
|
919
906
|
<react_native_1.View style={[
|
|
920
907
|
perfStyles.frameBarFill,
|
|
@@ -927,9 +914,9 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
927
914
|
|
|
928
915
|
<HighlightText_1.default text={event.detail} search={search} style={perfStyles.eventDetail} highlightStyle={perfStyles.searchHighlight}/>
|
|
929
916
|
|
|
930
|
-
|
|
917
|
+
|
|
931
918
|
{isExpanded && (<react_native_1.View style={perfStyles.expandedDetailBox}>
|
|
932
|
-
|
|
919
|
+
|
|
933
920
|
{(event.screenName || event.source) && (<react_native_1.View style={perfStyles.sourceRow}>
|
|
934
921
|
<react_native_1.Text style={perfStyles.sourceTag}>{t('performance.screenContext')}</react_native_1.Text>
|
|
935
922
|
<react_native_1.Text style={perfStyles.sourceText} numberOfLines={1}>
|
|
@@ -937,7 +924,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
937
924
|
</react_native_1.Text>
|
|
938
925
|
</react_native_1.View>)}
|
|
939
926
|
|
|
940
|
-
|
|
927
|
+
|
|
941
928
|
<react_native_1.View style={perfStyles.fpsMetricsGrid}>
|
|
942
929
|
<react_native_1.View style={perfStyles.fpsMetricItem}>
|
|
943
930
|
<react_native_1.Text style={perfStyles.fpsMetricLabel}>{t('performance.target60Fps', { fps: event.fps })}</react_native_1.Text>
|
|
@@ -968,7 +955,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
968
955
|
</react_native_1.View>
|
|
969
956
|
</react_native_1.View>
|
|
970
957
|
|
|
971
|
-
|
|
958
|
+
|
|
972
959
|
{event.breakdown && (<react_native_1.View style={perfStyles.breakdownGrid}>
|
|
973
960
|
<react_native_1.View style={perfStyles.breakdownCol}>
|
|
974
961
|
<react_native_1.Text style={perfStyles.breakdownLabel}>{t('performance.jsThread')}</react_native_1.Text>
|
|
@@ -999,7 +986,7 @@ const PerformanceTab = react_1.default.memo(() => {
|
|
|
999
986
|
</react_native_1.View>)}
|
|
1000
987
|
</react_native_1.View>)}
|
|
1001
988
|
|
|
1002
|
-
|
|
989
|
+
|
|
1003
990
|
{event.advice && (<react_native_1.View style={perfStyles.adviceCard}>
|
|
1004
991
|
<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 5 }}>
|
|
1005
992
|
<NetworkIcons_1.LightbulbIcon color={AppColors_1.AppColors.purpleShade700} size={12}/>
|
|
@@ -100,22 +100,16 @@ const getOriginBadge = (originType) => {
|
|
|
100
100
|
const ReduxDetail = react_1.default.memo(() => {
|
|
101
101
|
const { t } = (0, i18n_1.useTranslation)();
|
|
102
102
|
const { reduxState, reduxLastActionMap, selectedReduxSlice, selectedReduxAction, setSelectedReduxSlice, } = (0, InspectorContext_1.useInspector)();
|
|
103
|
-
// Search filter within details
|
|
104
103
|
const [detailSearch, setDetailSearch] = (0, react_1.useState)('');
|
|
105
|
-
// Sub-tabs for Slice & Action
|
|
106
104
|
const [sliceTab, setSliceTab] = (0, react_1.useState)('live');
|
|
107
105
|
const [actionTab, setActionTab] = (0, react_1.useState)('payload');
|
|
108
106
|
const [viewMode, setViewMode] = (0, react_1.useState)('pretty');
|
|
109
|
-
// Selected Action inside Timeline
|
|
110
107
|
const [expandedActionId, setExpandedActionId] = (0, react_1.useState)(null);
|
|
111
|
-
// Persistence data for active slice
|
|
112
108
|
const [isPersisted, setIsPersisted] = (0, react_1.useState)(false);
|
|
113
109
|
const [persistedData, setPersistedData] = (0, react_1.useState)(null);
|
|
114
|
-
// Fetch Action History
|
|
115
110
|
const allActionHistory = (0, react_1.useMemo)(() => {
|
|
116
111
|
return (0, reduxLogger_1.getActionHistory)();
|
|
117
112
|
}, [reduxLastActionMap]);
|
|
118
|
-
// Slices-filtered actions
|
|
119
113
|
const sliceActions = (0, react_1.useMemo)(() => {
|
|
120
114
|
if (!selectedReduxSlice)
|
|
121
115
|
return allActionHistory;
|
|
@@ -125,7 +119,6 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
125
119
|
return action.affectedSlices.includes(selectedReduxSlice);
|
|
126
120
|
});
|
|
127
121
|
}, [allActionHistory, selectedReduxSlice]);
|
|
128
|
-
// Filtered slice actions by search query in timeline tab
|
|
129
122
|
const filteredTimelineActions = (0, react_1.useMemo)(() => {
|
|
130
123
|
if (!detailSearch.trim())
|
|
131
124
|
return sliceActions;
|
|
@@ -176,7 +169,6 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
176
169
|
}
|
|
177
170
|
}
|
|
178
171
|
catch (e) {
|
|
179
|
-
// silent catch
|
|
180
172
|
}
|
|
181
173
|
setIsPersisted(false);
|
|
182
174
|
setPersistedData(null);
|
|
@@ -219,9 +211,6 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
219
211
|
},
|
|
220
212
|
]);
|
|
221
213
|
};
|
|
222
|
-
// ══════════════════════════════════════════════════════════════════════════
|
|
223
|
-
// ── 1. RENDER SLICE DETAIL VIEW ───────────────────────────────────────────
|
|
224
|
-
// ══════════════════════════════════════════════════════════════════════════
|
|
225
214
|
if (selectedReduxSlice != null) {
|
|
226
215
|
const sliceData = reduxState?.[selectedReduxSlice];
|
|
227
216
|
const fieldsCount = sliceData && typeof sliceData === 'object'
|
|
@@ -255,7 +244,7 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
255
244
|
},
|
|
256
245
|
];
|
|
257
246
|
return (<react_native_1.View style={{ flex: 1, backgroundColor: AppColors_1.AppColors.grayBackground }}>
|
|
258
|
-
|
|
247
|
+
|
|
259
248
|
<react_native_1.View style={reduxDetailStyles.infoBar}>
|
|
260
249
|
<react_native_1.View style={reduxDetailStyles.infoTopRow}>
|
|
261
250
|
<react_native_1.View style={{
|
|
@@ -295,11 +284,11 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
295
284
|
</react_native_1.View>)}
|
|
296
285
|
</react_native_1.View>
|
|
297
286
|
|
|
298
|
-
|
|
287
|
+
|
|
299
288
|
<CopyButton_1.default value={() => (sliceTab === 'live' ? sliceData : persistedData)} label={t('redux.sliceJson', 'Slice JSON')}/>
|
|
300
289
|
</react_native_1.View>
|
|
301
290
|
|
|
302
|
-
|
|
291
|
+
|
|
303
292
|
<react_native_1.View style={reduxDetailStyles.subStatsRow}>
|
|
304
293
|
<react_native_1.View style={[
|
|
305
294
|
reduxDetailStyles.statPill,
|
|
@@ -388,11 +377,11 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
388
377
|
</react_native_1.View>)}
|
|
389
378
|
</react_native_1.View>
|
|
390
379
|
|
|
391
|
-
|
|
380
|
+
|
|
392
381
|
<SegmentedTabs_1.default tabs={sliceTabs} activeKey={sliceTab} onChange={key => setSliceTab(key)} style={{ marginTop: 10 }}/>
|
|
393
382
|
</react_native_1.View>
|
|
394
383
|
|
|
395
|
-
|
|
384
|
+
|
|
396
385
|
{sliceTab !== 'metadata' && (<react_native_1.View style={reduxDetailStyles.searchContainer}>
|
|
397
386
|
<NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
|
|
398
387
|
<react_native_1.TextInput placeholder={sliceTab === 'timeline'
|
|
@@ -403,7 +392,7 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
403
392
|
</react_native_1.Pressable>)}
|
|
404
393
|
</react_native_1.View>)}
|
|
405
394
|
|
|
406
|
-
|
|
395
|
+
|
|
407
396
|
{sliceTab === 'timeline' ? (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 12, paddingBottom: 40 }} keyboardShouldPersistTaps="handled">
|
|
408
397
|
{filteredTimelineActions.length === 0 ? (<react_native_1.View style={reduxDetailStyles.emptyBox}>
|
|
409
398
|
<NetworkIcons_1.TimelineIcon color={AppColors_1.AppColors.grayTextWeak} size={28}/>
|
|
@@ -434,7 +423,7 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
434
423
|
#{action.id}
|
|
435
424
|
</react_native_1.Text>
|
|
436
425
|
</react_native_1.View>
|
|
437
|
-
|
|
426
|
+
|
|
438
427
|
<react_native_1.View style={{
|
|
439
428
|
flexDirection: 'row',
|
|
440
429
|
alignItems: 'center',
|
|
@@ -468,7 +457,7 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
468
457
|
</react_native_1.View>
|
|
469
458
|
</react_native_1.View>
|
|
470
459
|
|
|
471
|
-
|
|
460
|
+
|
|
472
461
|
{action.callerFile && (<react_native_1.View style={{
|
|
473
462
|
flexDirection: 'row',
|
|
474
463
|
alignItems: 'center',
|
|
@@ -526,9 +515,9 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
526
515
|
</react_native_1.Pressable>
|
|
527
516
|
</react_native_1.View>)}
|
|
528
517
|
|
|
529
|
-
|
|
518
|
+
|
|
530
519
|
{isExpanded ? (<react_native_1.View style={reduxDetailStyles.expandedContent}>
|
|
531
|
-
|
|
520
|
+
|
|
532
521
|
{action.stack ? (<react_native_1.View style={{ marginBottom: 12 }}>
|
|
533
522
|
<react_native_1.Text style={reduxDetailStyles.expandedSectionTitle}>
|
|
534
523
|
{t('redux.callStack', 'Call Stack Trace')}:
|
|
@@ -694,16 +683,11 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
694
683
|
State exists purely in active JavaScript memory.
|
|
695
684
|
</react_native_1.Text>
|
|
696
685
|
</react_native_1.View>)}
|
|
697
|
-
</react_native_1.View>) : (
|
|
698
|
-
/* Live State JsonViewer: Direct flex: 1 with fullHeight to prevent nested scroll conflicts */
|
|
699
|
-
<react_native_1.View style={{ flex: 1, padding: 10 }}>
|
|
686
|
+
</react_native_1.View>) : (<react_native_1.View style={{ flex: 1, padding: 10 }}>
|
|
700
687
|
<JsonViewer_1.default data={sliceData} search={detailSearch} forceOpen={detailSearch.length > 0 ? true : undefined} mode={viewMode} onModeChange={setViewMode} fullHeight={true} wrap={true}/>
|
|
701
688
|
</react_native_1.View>)}
|
|
702
689
|
</react_native_1.View>);
|
|
703
690
|
}
|
|
704
|
-
// ══════════════════════════════════════════════════════════════════════════
|
|
705
|
-
// ── 2. RENDER ACTION DETAIL VIEW (when an action is selected directly) ────
|
|
706
|
-
// ══════════════════════════════════════════════════════════════════════════
|
|
707
691
|
if (selectedReduxAction != null) {
|
|
708
692
|
const originMeta = getOriginBadge(selectedReduxAction.originType);
|
|
709
693
|
const callerBasename = selectedReduxAction.callerFile
|
|
@@ -732,7 +716,7 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
732
716
|
},
|
|
733
717
|
];
|
|
734
718
|
return (<react_native_1.View style={{ flex: 1, backgroundColor: AppColors_1.AppColors.grayBackground }}>
|
|
735
|
-
|
|
719
|
+
|
|
736
720
|
<react_native_1.View style={reduxDetailStyles.infoBar}>
|
|
737
721
|
<react_native_1.View style={reduxDetailStyles.infoTopRow}>
|
|
738
722
|
<react_native_1.View style={{
|
|
@@ -748,7 +732,7 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
748
732
|
#{selectedReduxAction.id}
|
|
749
733
|
</react_native_1.Text>
|
|
750
734
|
</react_native_1.View>
|
|
751
|
-
|
|
735
|
+
|
|
752
736
|
<react_native_1.View style={{
|
|
753
737
|
flexDirection: 'row',
|
|
754
738
|
alignItems: 'center',
|
|
@@ -781,11 +765,11 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
781
765
|
</react_native_1.View>)}
|
|
782
766
|
</react_native_1.View>
|
|
783
767
|
|
|
784
|
-
|
|
768
|
+
|
|
785
769
|
<CopyButton_1.default value={() => selectedReduxAction} label="Copy Action"/>
|
|
786
770
|
</react_native_1.View>
|
|
787
771
|
|
|
788
|
-
|
|
772
|
+
|
|
789
773
|
<react_native_1.View style={reduxDetailStyles.subStatsRow}>
|
|
790
774
|
{selectedReduxAction.affectedSlices &&
|
|
791
775
|
selectedReduxAction.affectedSlices.length > 0 && (<react_native_1.View style={[
|
|
@@ -831,7 +815,7 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
831
815
|
</react_native_1.View>
|
|
832
816
|
</react_native_1.View>
|
|
833
817
|
|
|
834
|
-
|
|
818
|
+
|
|
835
819
|
{selectedReduxAction.callerFile && (<react_native_1.View style={{
|
|
836
820
|
flexDirection: 'row',
|
|
837
821
|
alignItems: 'center',
|
|
@@ -888,11 +872,11 @@ const ReduxDetail = react_1.default.memo(() => {
|
|
|
888
872
|
</react_native_1.Pressable>
|
|
889
873
|
</react_native_1.View>)}
|
|
890
874
|
|
|
891
|
-
|
|
875
|
+
|
|
892
876
|
<SegmentedTabs_1.default tabs={actionTabs} activeKey={actionTab} onChange={key => setActionTab(key)} style={{ marginTop: 10 }}/>
|
|
893
877
|
</react_native_1.View>
|
|
894
878
|
|
|
895
|
-
|
|
879
|
+
|
|
896
880
|
{actionTab === 'payload' ? (<react_native_1.View style={{ flex: 1, padding: 10 }}>
|
|
897
881
|
{selectedReduxAction.payload !== undefined ? (<JsonViewer_1.default data={selectedReduxAction.payload} search={detailSearch} forceOpen={true} fullHeight={true} wrap={true}/>) : (<react_native_1.View style={reduxDetailStyles.emptyBox}>
|
|
898
882
|
<react_native_1.Text style={reduxDetailStyles.emptyBoxText}>
|