react-native-inapp-inspector 1.1.34 → 2.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/README.md +123 -101
- package/android/build.gradle +13 -1
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +904 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorPackage.kt +17 -0
- package/dist/commonjs/components/ConsoleLogCard.js +57 -56
- package/dist/commonjs/components/CopyButton.js +10 -1
- package/dist/commonjs/components/ErrorBoundary.js +3 -0
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +7 -3
- package/dist/commonjs/components/Inspector/BundleTab.js +20 -20
- package/dist/commonjs/components/Inspector/ConsoleTab.js +1 -1
- package/dist/commonjs/components/Inspector/CrashDetail.js +16 -12
- package/dist/commonjs/components/Inspector/CrashTab.js +97 -90
- package/dist/commonjs/components/Inspector/InspectorHeader.js +28 -24
- package/dist/commonjs/components/Inspector/MainScreen.js +20 -103
- package/dist/commonjs/components/Inspector/NetworkTab.js +143 -10
- package/dist/commonjs/components/Inspector/PerformanceTab.js +96 -3
- package/dist/commonjs/components/Inspector/ReduxDetail.js +24 -19
- package/dist/commonjs/components/Inspector/ReduxTab.js +30 -18
- package/dist/commonjs/components/Inspector/SettingsPanel.js +1578 -754
- package/dist/commonjs/components/Inspector/TabBar.js +6 -3
- package/dist/commonjs/components/LogCard.js +27 -9
- package/dist/commonjs/components/MetaAccordion.js +42 -0
- package/dist/commonjs/components/NetworkIcons.d.ts +10 -0
- package/dist/commonjs/components/NetworkIcons.js +53 -1
- package/dist/commonjs/components/Toast.js +3 -3
- package/dist/commonjs/components/TouchableScale.d.ts +5 -2
- package/dist/commonjs/components/TouchableScale.js +30 -32
- package/dist/commonjs/constants/index.d.ts +1 -2
- package/dist/commonjs/constants/index.js +4 -0
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/analyticsLogger.d.ts +6 -0
- package/dist/commonjs/customHooks/analyticsLogger.js +16 -5
- package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +2 -0
- package/dist/commonjs/customHooks/bundleAnalyzer.js +26 -17
- package/dist/commonjs/customHooks/consoleLogger.d.ts +2 -0
- package/dist/commonjs/customHooks/consoleLogger.js +10 -1
- package/dist/commonjs/customHooks/crashHandler.d.ts +2 -0
- package/dist/commonjs/customHooks/crashHandler.js +17 -1
- package/dist/commonjs/customHooks/networkLogger.d.ts +2 -0
- package/dist/commonjs/customHooks/networkLogger.js +12 -1
- package/dist/commonjs/customHooks/performanceTracker.d.ts +3 -1
- package/dist/commonjs/customHooks/performanceTracker.js +18 -4
- package/dist/commonjs/customHooks/reduxLogger.d.ts +2 -0
- package/dist/commonjs/customHooks/reduxLogger.js +10 -1
- package/dist/commonjs/helpers/index.js +10 -1
- package/dist/commonjs/helpers/settingsStore.d.ts +9 -0
- package/dist/commonjs/helpers/settingsStore.js +59 -3
- package/dist/commonjs/i18n/locales/en.json +96 -28
- package/dist/commonjs/index.d.ts +1 -0
- package/dist/commonjs/index.js +307 -73
- package/dist/commonjs/native/NativeInspector.d.ts +125 -0
- package/dist/commonjs/native/NativeInspector.js +313 -0
- package/dist/commonjs/native/NativeNetworkInspector.d.ts +22 -0
- package/dist/commonjs/native/NativeNetworkInspector.js +4 -0
- package/dist/commonjs/styles/AppColors.d.ts +28 -0
- package/dist/commonjs/styles/AppColors.js +30 -0
- package/dist/commonjs/styles/index.js +6 -6
- package/dist/commonjs/types/enums.d.ts +1 -1
- package/dist/commonjs/types/interfaces.d.ts +9 -0
- package/dist/esm/components/ConsoleLogCard.js +58 -57
- package/dist/esm/components/CopyButton.js +10 -1
- package/dist/esm/components/ErrorBoundary.js +3 -0
- package/dist/esm/components/Inspector/AnalyticsTab.js +7 -3
- package/dist/esm/components/Inspector/BundleTab.js +20 -20
- package/dist/esm/components/Inspector/ConsoleTab.js +1 -1
- package/dist/esm/components/Inspector/CrashDetail.js +16 -12
- package/dist/esm/components/Inspector/CrashTab.js +97 -90
- package/dist/esm/components/Inspector/InspectorHeader.js +29 -25
- package/dist/esm/components/Inspector/MainScreen.js +21 -71
- package/dist/esm/components/Inspector/NetworkTab.js +145 -12
- package/dist/esm/components/Inspector/PerformanceTab.js +96 -3
- package/dist/esm/components/Inspector/ReduxDetail.js +24 -19
- package/dist/esm/components/Inspector/ReduxTab.js +30 -18
- package/dist/esm/components/Inspector/SettingsPanel.js +1582 -758
- package/dist/esm/components/Inspector/TabBar.js +7 -4
- package/dist/esm/components/LogCard.js +27 -9
- package/dist/esm/components/MetaAccordion.js +42 -0
- package/dist/esm/components/NetworkIcons.d.ts +10 -0
- package/dist/esm/components/NetworkIcons.js +42 -0
- package/dist/esm/components/Toast.js +3 -3
- package/dist/esm/components/TouchableScale.d.ts +5 -2
- package/dist/esm/components/TouchableScale.js +31 -33
- package/dist/esm/constants/index.d.ts +1 -2
- package/dist/esm/constants/index.js +4 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/analyticsLogger.d.ts +6 -0
- package/dist/esm/customHooks/analyticsLogger.js +12 -4
- package/dist/esm/customHooks/bundleAnalyzer.d.ts +2 -0
- package/dist/esm/customHooks/bundleAnalyzer.js +23 -16
- package/dist/esm/customHooks/consoleLogger.d.ts +2 -0
- package/dist/esm/customHooks/consoleLogger.js +7 -0
- package/dist/esm/customHooks/crashHandler.d.ts +2 -0
- package/dist/esm/customHooks/crashHandler.js +14 -0
- package/dist/esm/customHooks/networkLogger.d.ts +2 -0
- package/dist/esm/customHooks/networkLogger.js +9 -0
- package/dist/esm/customHooks/performanceTracker.d.ts +3 -1
- package/dist/esm/customHooks/performanceTracker.js +15 -3
- package/dist/esm/customHooks/reduxLogger.d.ts +2 -0
- package/dist/esm/customHooks/reduxLogger.js +7 -0
- package/dist/esm/helpers/index.js +10 -1
- package/dist/esm/helpers/settingsStore.d.ts +9 -0
- package/dist/esm/helpers/settingsStore.js +58 -3
- package/dist/esm/i18n/locales/en.json +96 -28
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +279 -59
- package/dist/esm/native/NativeInspector.d.ts +125 -0
- package/dist/esm/native/NativeInspector.js +289 -0
- package/dist/esm/native/NativeNetworkInspector.d.ts +22 -0
- package/dist/esm/native/NativeNetworkInspector.js +2 -0
- package/dist/esm/styles/AppColors.d.ts +28 -0
- package/dist/esm/styles/AppColors.js +30 -0
- package/dist/esm/styles/index.js +6 -6
- package/dist/esm/types/enums.d.ts +1 -1
- package/dist/esm/types/interfaces.d.ts +9 -0
- package/ios/NetworkInspectorModule.h +6 -0
- package/ios/NetworkInspectorModule.m +720 -5
- package/package.json +15 -3
- package/react-native-inapp-inspector.podspec +7 -2
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.java +0 -97
- package/android/src/main/java/com/inappinspector/NetworkInspectorPackage.java +0 -28
|
@@ -147,11 +147,16 @@ const CrashTab = react_1.default.memo(() => {
|
|
|
147
147
|
}
|
|
148
148
|
// Search filter
|
|
149
149
|
if (searchQuery.trim().length > 0) {
|
|
150
|
-
const
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
150
|
+
const queryTokens = searchQuery.trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
151
|
+
const searchTarget = [
|
|
152
|
+
item.message || '',
|
|
153
|
+
item.name || '',
|
|
154
|
+
item.stack || '',
|
|
155
|
+
item.type || '',
|
|
156
|
+
item.deviceInfo?.platform || '',
|
|
157
|
+
...(item.breadcrumbs || []).map(b => `${b.type || ''} ${b.message || ''}`),
|
|
158
|
+
].join(' ').toLowerCase();
|
|
159
|
+
return queryTokens.every(token => searchTarget.includes(token));
|
|
155
160
|
}
|
|
156
161
|
return true;
|
|
157
162
|
});
|
|
@@ -288,74 +293,75 @@ const CrashTab = react_1.default.memo(() => {
|
|
|
288
293
|
</AnimatedEntrance_1.default>);
|
|
289
294
|
}, [searchQuery, setSelectedCrash]);
|
|
290
295
|
return (<react_native_1.View style={localStyles.container}>
|
|
291
|
-
{
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
296
|
+
{crashRecords.length > 0 && (<>
|
|
297
|
+
{/* ─── Top Stats Bar ─── */}
|
|
298
|
+
<react_native_1.View style={localStyles.statsBar}>
|
|
299
|
+
<react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={localStyles.statsScrollContent}>
|
|
300
|
+
<react_native_1.View style={[localStyles.statChip, localStyles.statChipActive]}>
|
|
301
|
+
<react_native_1.Text style={localStyles.statChipValue}>{stats.total}</react_native_1.Text>
|
|
302
|
+
<react_native_1.Text style={localStyles.statChipLabel}>{t('crash.statCrashes')}</react_native_1.Text>
|
|
303
|
+
</react_native_1.View>
|
|
298
304
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
+
<react_native_1.View style={localStyles.statChip}>
|
|
306
|
+
<react_native_1.Text style={[localStyles.statChipValue, { color: AppColors_1.AppColors.errorColor }]}>
|
|
307
|
+
{stats.fatalCount}
|
|
308
|
+
</react_native_1.Text>
|
|
309
|
+
<react_native_1.Text style={localStyles.statChipLabel}>{t('crash.statFatal')}</react_native_1.Text>
|
|
310
|
+
</react_native_1.View>
|
|
305
311
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
+
<react_native_1.View style={localStyles.statChip}>
|
|
313
|
+
<react_native_1.Text style={[localStyles.statChipValue, { color: AppColors_1.AppColors.offerPurple }]}>
|
|
314
|
+
{stats.jsCount}
|
|
315
|
+
</react_native_1.Text>
|
|
316
|
+
<react_native_1.Text style={localStyles.statChipLabel}>{t('crash.statJsErrors')}</react_native_1.Text>
|
|
317
|
+
</react_native_1.View>
|
|
312
318
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
+
<react_native_1.View style={localStyles.statChip}>
|
|
320
|
+
<react_native_1.Text style={[localStyles.statChipValue, { color: AppColors_1.AppColors.darkOrange }]}>
|
|
321
|
+
{stats.promiseCount}
|
|
322
|
+
</react_native_1.Text>
|
|
323
|
+
<react_native_1.Text style={localStyles.statChipLabel}>{t('crash.statPromises')}</react_native_1.Text>
|
|
324
|
+
</react_native_1.View>
|
|
319
325
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
+
<react_native_1.View style={localStyles.statChip}>
|
|
327
|
+
<react_native_1.Text style={[localStyles.statChipValue, { color: AppColors_1.AppColors.purple }]}>
|
|
328
|
+
{stats.renderCount}
|
|
329
|
+
</react_native_1.Text>
|
|
330
|
+
<react_native_1.Text style={localStyles.statChipLabel}>{t('crash.statRender')}</react_native_1.Text>
|
|
331
|
+
</react_native_1.View>
|
|
326
332
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
333
|
+
<react_native_1.View style={localStyles.statChip}>
|
|
334
|
+
<react_native_1.Text style={[localStyles.statChipValue, { color: AppColors_1.AppColors.skyBlue }]}>
|
|
335
|
+
{stats.nativeCount}
|
|
336
|
+
</react_native_1.Text>
|
|
337
|
+
<react_native_1.Text style={localStyles.statChipLabel}>{t('crash.statNative')}</react_native_1.Text>
|
|
338
|
+
</react_native_1.View>
|
|
339
|
+
</react_native_1.ScrollView>
|
|
332
340
|
</react_native_1.View>
|
|
333
|
-
</react_native_1.ScrollView>
|
|
334
|
-
</react_native_1.View>
|
|
335
341
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
342
|
+
{/* ─── Search & Controls ─── */}
|
|
343
|
+
<react_native_1.View style={localStyles.controlsContainer}>
|
|
344
|
+
<react_native_1.View style={localStyles.searchRow}>
|
|
345
|
+
<react_native_1.View style={localStyles.searchInputWrapper}>
|
|
346
|
+
<NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
|
|
347
|
+
<react_native_1.TextInput value={searchQuery} onChangeText={setSearchQuery} placeholder={t('crash.searchPlaceholder')} placeholderTextColor={AppColors_1.AppColors.grayTextWeak} style={localStyles.searchInput} autoCapitalize="none" autoCorrect={false}/>
|
|
348
|
+
{searchQuery.length > 0 && (<react_native_1.TouchableOpacity onPress={() => setSearchQuery('')} hitSlop={8}>
|
|
349
|
+
<NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
|
|
350
|
+
</react_native_1.TouchableOpacity>)}
|
|
351
|
+
</react_native_1.View>
|
|
346
352
|
|
|
347
|
-
|
|
348
|
-
|
|
353
|
+
{/* Crash Filters */}
|
|
354
|
+
<TouchableScale_1.default onPress={() => setIsFilterModalOpen(true)} style={[
|
|
349
355
|
localStyles.filterButton,
|
|
350
356
|
!(0, CrashFilterModal_1.isCrashFiltersDefault)(crashFilters) && {
|
|
351
357
|
borderColor: `${AppColors_1.AppColors.brandPurple}60`,
|
|
352
358
|
backgroundColor: `${AppColors_1.AppColors.brandPurple}15`,
|
|
353
359
|
},
|
|
354
360
|
]}>
|
|
355
|
-
|
|
361
|
+
<NetworkIcons_1.FilterIcon size={14} color={(0, CrashFilterModal_1.isCrashFiltersDefault)(crashFilters)
|
|
356
362
|
? AppColors_1.AppColors.grayTextStrong
|
|
357
363
|
: AppColors_1.AppColors.brandPurple}/>
|
|
358
|
-
|
|
364
|
+
{!(0, CrashFilterModal_1.isCrashFiltersDefault)(crashFilters) && (<react_native_1.View style={{
|
|
359
365
|
position: 'absolute',
|
|
360
366
|
top: 2,
|
|
361
367
|
right: 2,
|
|
@@ -366,40 +372,41 @@ const CrashTab = react_1.default.memo(() => {
|
|
|
366
372
|
borderWidth: 1,
|
|
367
373
|
borderColor: AppColors_1.AppColors.white,
|
|
368
374
|
}}/>)}
|
|
369
|
-
|
|
375
|
+
</TouchableScale_1.default>
|
|
370
376
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
377
|
+
{/* Clear Crashes */}
|
|
378
|
+
<TouchableScale_1.default onPress={handleClearAll} style={localStyles.clearButton}>
|
|
379
|
+
<NetworkIcons_1.TrashIcon size={14} color={AppColors_1.AppColors.errorColor}/>
|
|
380
|
+
</TouchableScale_1.default>
|
|
381
|
+
</react_native_1.View>
|
|
376
382
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
383
|
+
{/* ─── Filter Chips ─── */}
|
|
384
|
+
<react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={localStyles.filterScrollContent}>
|
|
385
|
+
{[
|
|
386
|
+
{ key: 'all', label: t('crash.filterAll'), Icon: NetworkIcons_1.LayersIcon },
|
|
387
|
+
{ key: 'fatal', label: t('crash.filterFatal'), Icon: NetworkIcons_1.SkullIcon },
|
|
388
|
+
{ key: 'js', label: t('crash.filterJsError'), Icon: NetworkIcons_1.JsIcon },
|
|
389
|
+
{ key: 'promise', label: t('crash.filterPromise'), Icon: NetworkIcons_1.HourglassIcon },
|
|
390
|
+
{ key: 'render', label: t('crash.filterRender'), Icon: NetworkIcons_1.LayoutIcon },
|
|
391
|
+
{ key: 'native', label: t('crash.filterNative'), Icon: NetworkIcons_1.ChipIcon },
|
|
392
|
+
].map(chip => {
|
|
393
|
+
const isActive = filterType === chip.key;
|
|
394
|
+
return (<react_native_1.TouchableOpacity key={chip.key} onPress={() => setFilterType(chip.key)} style={[
|
|
395
|
+
localStyles.filterChip,
|
|
396
|
+
isActive && localStyles.filterChipActive,
|
|
397
|
+
]}>
|
|
398
|
+
<chip.Icon size={12} color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.grayTextStrong}/>
|
|
399
|
+
<react_native_1.Text style={[
|
|
400
|
+
localStyles.filterChipText,
|
|
401
|
+
isActive && localStyles.filterChipTextActive,
|
|
402
|
+
]}>
|
|
403
|
+
{chip.label}
|
|
404
|
+
</react_native_1.Text>
|
|
405
|
+
</react_native_1.TouchableOpacity>);
|
|
406
|
+
})}
|
|
407
|
+
</react_native_1.ScrollView>
|
|
408
|
+
</react_native_1.View>
|
|
409
|
+
</>)}
|
|
403
410
|
|
|
404
411
|
{/* ─── Crash List or Empty State ─── */}
|
|
405
412
|
{filteredList.length === 0 ? (<react_native_1.ScrollView contentContainerStyle={localStyles.emptyContainer} showsVerticalScrollIndicator={false}>
|
|
@@ -412,7 +419,7 @@ const CrashTab = react_1.default.memo(() => {
|
|
|
412
419
|
? t('crash.emptySearchSubtitle')
|
|
413
420
|
: t('crash.emptySubtitle')}
|
|
414
421
|
</react_native_1.Text>
|
|
415
|
-
</react_native_1.ScrollView>) : (<react_native_1.FlatList data={filteredList} keyExtractor={item => item.id} renderItem={renderCard} contentContainerStyle={localStyles.listContent} showsVerticalScrollIndicator={false} ListFooterComponent={<EndOfListFooter_1.default />}/>)}
|
|
422
|
+
</react_native_1.ScrollView>) : (<react_native_1.FlatList data={filteredList} keyExtractor={item => item.id} renderItem={renderCard} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} contentContainerStyle={localStyles.listContent} showsVerticalScrollIndicator={false} ListFooterComponent={<EndOfListFooter_1.default />}/>)}
|
|
416
423
|
|
|
417
424
|
{/* Filter Modal */}
|
|
418
425
|
<CrashFilterModal_1.default visible={isFilterModalOpen} onClose={() => setIsFilterModalOpen(false)} filters={crashFilters} onApply={setCrashFilters} searchQuery={searchQuery}/>
|
|
@@ -57,33 +57,33 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
57
57
|
if (clean === 'DEV' || clean.includes('DEV') || clean === 'LOCAL') {
|
|
58
58
|
return {
|
|
59
59
|
label: rawEnv,
|
|
60
|
-
bg:
|
|
61
|
-
border:
|
|
62
|
-
text:
|
|
60
|
+
bg: `${AppColors_1.AppColors.emerald500}40`, // emerald
|
|
61
|
+
border: `${AppColors_1.AppColors.emerald400}8C`,
|
|
62
|
+
text: AppColors_1.AppColors.mintGreenBorder,
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
65
|
if (clean === 'UAT' || clean === 'QA' || clean === 'TEST') {
|
|
66
66
|
return {
|
|
67
67
|
label: rawEnv,
|
|
68
|
-
bg:
|
|
69
|
-
border:
|
|
70
|
-
text:
|
|
68
|
+
bg: `${AppColors_1.AppColors.amber500}47`, // amber
|
|
69
|
+
border: `${AppColors_1.AppColors.amber400}99`,
|
|
70
|
+
text: AppColors_1.AppColors.amberWarmBorder,
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
73
|
if (clean === 'PREPROD' || clean === 'STAGE' || clean === 'STAGING') {
|
|
74
74
|
return {
|
|
75
75
|
label: rawEnv,
|
|
76
|
-
bg:
|
|
77
|
-
border:
|
|
78
|
-
text:
|
|
76
|
+
bg: `${AppColors_1.AppColors.purple500}47`, // purple
|
|
77
|
+
border: `${AppColors_1.AppColors.purple400}99`,
|
|
78
|
+
text: AppColors_1.AppColors.violetSoftBorder,
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
81
|
// PROD / Live
|
|
82
82
|
return {
|
|
83
83
|
label: rawEnv,
|
|
84
|
-
bg:
|
|
85
|
-
border:
|
|
86
|
-
text:
|
|
84
|
+
bg: `${AppColors_1.AppColors.rose500}40`, // rose
|
|
85
|
+
border: `${AppColors_1.AppColors.roseBorder}8C`,
|
|
86
|
+
text: AppColors_1.AppColors.errorBorder,
|
|
87
87
|
};
|
|
88
88
|
}, [environment]);
|
|
89
89
|
const isDetailView = (activeTab === 'apis' && selected != null) ||
|
|
@@ -226,23 +226,27 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
226
226
|
</react_native_1.Text>
|
|
227
227
|
</react_native_1.View>
|
|
228
228
|
|
|
229
|
-
<react_native_1.
|
|
230
|
-
backgroundColor:
|
|
229
|
+
<react_native_1.Pressable onPress={() => react_native_1.Linking.openURL('https://www.npmjs.com/package/react-native-inapp-inspector').catch(() => { })} style={{
|
|
230
|
+
backgroundColor: '#CB383726',
|
|
231
231
|
borderRadius: 4,
|
|
232
|
-
paddingHorizontal:
|
|
232
|
+
paddingHorizontal: 5,
|
|
233
233
|
paddingVertical: 1.5,
|
|
234
234
|
borderWidth: 1,
|
|
235
|
-
borderColor:
|
|
235
|
+
borderColor: '#CB383780',
|
|
236
|
+
flexDirection: 'row',
|
|
237
|
+
alignItems: 'center',
|
|
238
|
+
gap: 3.5,
|
|
236
239
|
flexShrink: 0,
|
|
237
240
|
}}>
|
|
241
|
+
<NetworkIcons_1.NpmIcon size={11} color="#FF6B6B"/>
|
|
238
242
|
<react_native_1.Text style={{
|
|
239
|
-
fontFamily: AppFonts_1.AppFonts.
|
|
240
|
-
fontSize:
|
|
241
|
-
color:
|
|
243
|
+
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
244
|
+
fontSize: 9,
|
|
245
|
+
color: '#FF6B6B',
|
|
242
246
|
}} numberOfLines={1}>
|
|
243
247
|
v{constants_2.LIB_VERSION}
|
|
244
248
|
</react_native_1.Text>
|
|
245
|
-
</react_native_1.
|
|
249
|
+
</react_native_1.Pressable>
|
|
246
250
|
</react_native_1.View>
|
|
247
251
|
</react_native_1.View>
|
|
248
252
|
</react_native_1.View>) : null}
|
|
@@ -484,8 +488,8 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
484
488
|
styles_1.default.headerMethodBadge,
|
|
485
489
|
{
|
|
486
490
|
backgroundColor: selectedCrash.isFatal
|
|
487
|
-
?
|
|
488
|
-
:
|
|
491
|
+
? AppColors_1.AppColors.red600
|
|
492
|
+
: AppColors_1.AppColors.amber600,
|
|
489
493
|
},
|
|
490
494
|
]}>
|
|
491
495
|
<react_native_1.Text style={styles_1.default.headerMethodText}>
|
|
@@ -501,8 +505,8 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
501
505
|
styles_1.default.headerStatusDot,
|
|
502
506
|
{
|
|
503
507
|
backgroundColor: selectedCrash.isFatal
|
|
504
|
-
?
|
|
505
|
-
:
|
|
508
|
+
? AppColors_1.AppColors.red600
|
|
509
|
+
: AppColors_1.AppColors.amber500,
|
|
506
510
|
},
|
|
507
511
|
]}/>
|
|
508
512
|
<react_native_1.Text style={styles_1.default.headerSubTitle}>
|
|
@@ -1,42 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
38
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const react_1 =
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
40
7
|
const react_native_1 = require("react-native");
|
|
41
8
|
const InspectorContext_1 = require("./InspectorContext");
|
|
42
9
|
const ErrorBoundary_1 = __importDefault(require("../ErrorBoundary"));
|
|
@@ -61,32 +28,27 @@ const styles_1 = __importDefault(require("../../styles"));
|
|
|
61
28
|
const AppColors_1 = require("../../styles/AppColors");
|
|
62
29
|
const NavigationTracker_1 = __importDefault(require("./NavigationTracker"));
|
|
63
30
|
const MainScreen = () => {
|
|
64
|
-
const { visible, modalAnimationType, closeModal, modalHeightPercent, selected, selectedEvent, selectedLog, selectedReduxSlice, selectedReduxAction, selectedCrash, settingsPage, activeTab, isReady, isEnabled, hasNavigationContext, setNavState, } = (0, InspectorContext_1.useInspector)();
|
|
65
|
-
// Lazy-mount each tab on first visit and cache it in memory for 0ms instantaneous switching
|
|
66
|
-
const [mountedTabs, setMountedTabs] = (0, react_1.useState)({
|
|
67
|
-
[activeTab]: true,
|
|
68
|
-
});
|
|
69
|
-
(0, react_1.useEffect)(() => {
|
|
70
|
-
setMountedTabs(prev => {
|
|
71
|
-
if (prev[activeTab])
|
|
72
|
-
return prev;
|
|
73
|
-
return { ...prev, [activeTab]: true };
|
|
74
|
-
});
|
|
75
|
-
}, [activeTab]);
|
|
31
|
+
const { visible, modalAnimationType, closeModal, modalHeightPercent, selected, selectedEvent, selectedLog, selectedReduxSlice, selectedReduxAction, selectedCrash, settingsPage, activeTab, isReady, isEnabled, useNativeFab, hasNavigationContext, setNavState, } = (0, InspectorContext_1.useInspector)();
|
|
76
32
|
const isDetailActive = (activeTab === 'apis' && selected != null) ||
|
|
77
33
|
(activeTab === 'analytics' && selectedEvent != null) ||
|
|
78
34
|
(activeTab === 'logs' && selectedLog != null) ||
|
|
79
35
|
(activeTab === 'redux' && (selectedReduxSlice != null || selectedReduxAction != null)) ||
|
|
80
36
|
(activeTab === 'crash' && selectedCrash != null);
|
|
81
37
|
return (<>
|
|
82
|
-
{(react_native_1.Platform.OS === 'ios' || react_native_1.Platform.OS === 'android') &&
|
|
83
|
-
|
|
38
|
+
{(react_native_1.Platform.OS === 'ios' || react_native_1.Platform.OS === 'android') &&
|
|
39
|
+
isEnabled &&
|
|
40
|
+
!useNativeFab && <FabLauncher_1.default />}
|
|
41
|
+
<react_native_1.Modal visible={visible} animationType={modalAnimationType} transparent statusBarTranslucent={true}>
|
|
84
42
|
{visible && (<ErrorBoundary_1.default onClose={closeModal}>
|
|
85
43
|
<react_native_1.View style={styles_1.default.modalBackdrop}>
|
|
86
44
|
<react_native_1.Pressable style={styles_1.default.modalBackdropPressable} onPress={closeModal}/>
|
|
87
45
|
<react_native_1.View style={[
|
|
88
46
|
styles_1.default.modalContentCard,
|
|
89
|
-
{
|
|
47
|
+
{
|
|
48
|
+
height: `${modalHeightPercent}%`,
|
|
49
|
+
borderTopLeftRadius: modalHeightPercent >= 100 ? 0 : 20,
|
|
50
|
+
borderTopRightRadius: modalHeightPercent >= 100 ? 0 : 20,
|
|
51
|
+
},
|
|
90
52
|
]}>
|
|
91
53
|
<react_native_1.StatusBar translucent backgroundColor="transparent" barStyle="light-content"/>
|
|
92
54
|
|
|
@@ -95,66 +57,21 @@ const MainScreen = () => {
|
|
|
95
57
|
{/* ─── Horizontal Scrollable Tab Bar inside Content ─── */}
|
|
96
58
|
{!isDetailActive && settingsPage === null ? (<TabBar_1.default />) : null}
|
|
97
59
|
|
|
98
|
-
{isReady ? (isDetailActive ? (activeTab === 'apis' && selected != null ? (<NetworkDetail_1.default />) : activeTab === 'analytics' && selectedEvent != null ? (<AnalyticsDetail_1.default event={selectedEvent}/>) : activeTab === 'logs' && selectedLog != null ? (<LogDetail_1.default />) : activeTab === 'redux' ? (<ReduxDetail_1.default />) : activeTab === 'crash' && selectedCrash != null ? (<CrashDetail_1.default />) : null) : (
|
|
99
|
-
<
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
<
|
|
106
|
-
|
|
107
|
-
display: activeTab === 'logs' ? 'flex' : 'none',
|
|
108
|
-
}}>
|
|
109
|
-
{mountedTabs.logs && <ConsoleTab_1.default />}
|
|
110
|
-
</react_native_1.View>
|
|
111
|
-
<react_native_1.View style={{
|
|
112
|
-
flex: 1,
|
|
113
|
-
display: activeTab === 'analytics' ? 'flex' : 'none',
|
|
114
|
-
}}>
|
|
115
|
-
{mountedTabs.analytics && <AnalyticsTab_1.default />}
|
|
116
|
-
</react_native_1.View>
|
|
117
|
-
<react_native_1.View style={{
|
|
118
|
-
flex: 1,
|
|
119
|
-
display: activeTab === 'redux' ? 'flex' : 'none',
|
|
120
|
-
}}>
|
|
121
|
-
{mountedTabs.redux && <ReduxTab_1.default />}
|
|
122
|
-
</react_native_1.View>
|
|
123
|
-
<react_native_1.View style={{
|
|
124
|
-
flex: 1,
|
|
125
|
-
display: activeTab === 'bundle' ? 'flex' : 'none',
|
|
126
|
-
}}>
|
|
127
|
-
{mountedTabs.bundle && <BundleTab_1.default />}
|
|
128
|
-
</react_native_1.View>
|
|
129
|
-
<react_native_1.View style={{
|
|
130
|
-
flex: 1,
|
|
131
|
-
display: activeTab === 'performance' ? 'flex' : 'none',
|
|
132
|
-
}}>
|
|
133
|
-
{mountedTabs.performance && <PerformanceTab_1.default />}
|
|
134
|
-
</react_native_1.View>
|
|
135
|
-
<react_native_1.View style={{
|
|
136
|
-
flex: 1,
|
|
137
|
-
display: activeTab === 'crash' ? 'flex' : 'none',
|
|
138
|
-
}}>
|
|
139
|
-
{mountedTabs.crash && <CrashTab_1.default />}
|
|
140
|
-
</react_native_1.View>
|
|
141
|
-
</>)) : (<react_native_1.View style={styles_1.default.empty}>
|
|
60
|
+
{settingsPage !== null ? (<SettingsPanel_1.default />) : isReady ? (isDetailActive ? (activeTab === 'apis' && selected != null ? (<NetworkDetail_1.default />) : activeTab === 'analytics' && selectedEvent != null ? (<AnalyticsDetail_1.default event={selectedEvent}/>) : activeTab === 'logs' && selectedLog != null ? (<LogDetail_1.default />) : activeTab === 'redux' ? (<ReduxDetail_1.default />) : activeTab === 'crash' && selectedCrash != null ? (<CrashDetail_1.default />) : null) : (<react_native_1.View style={{ flex: 1 }}>
|
|
61
|
+
{activeTab === 'apis' && <NetworkTab_1.default />}
|
|
62
|
+
{activeTab === 'logs' && <ConsoleTab_1.default />}
|
|
63
|
+
{activeTab === 'analytics' && <AnalyticsTab_1.default />}
|
|
64
|
+
{activeTab === 'redux' && <ReduxTab_1.default />}
|
|
65
|
+
{activeTab === 'bundle' && <BundleTab_1.default />}
|
|
66
|
+
{activeTab === 'performance' && <PerformanceTab_1.default />}
|
|
67
|
+
{activeTab === 'crash' && <CrashTab_1.default />}
|
|
68
|
+
</react_native_1.View>)) : (<react_native_1.View style={styles_1.default.empty}>
|
|
142
69
|
<react_native_1.ActivityIndicator size="large" color={AppColors_1.AppColors.purple}/>
|
|
143
70
|
<react_native_1.Text style={[styles_1.default.emptySub, { marginTop: 12 }]}>
|
|
144
71
|
Loading logs...
|
|
145
72
|
</react_native_1.Text>
|
|
146
73
|
</react_native_1.View>)}
|
|
147
74
|
|
|
148
|
-
{settingsPage !== null && (<react_native_1.View style={[
|
|
149
|
-
react_native_1.StyleSheet.absoluteFill,
|
|
150
|
-
{
|
|
151
|
-
backgroundColor: AppColors_1.AppColors.grayBackground,
|
|
152
|
-
zIndex: 99999,
|
|
153
|
-
},
|
|
154
|
-
]}>
|
|
155
|
-
<SettingsPanel_1.default />
|
|
156
|
-
</react_native_1.View>)}
|
|
157
|
-
|
|
158
75
|
{/* Bottom floating toast notification */}
|
|
159
76
|
<Toast_1.default />
|
|
160
77
|
</react_native_1.View>
|