react-native-inapp-inspector 2.3.4 → 2.3.6
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 +168 -9
- 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 +7 -0
- package/dist/commonjs/constants/telemetryConfig.js +10 -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 +302 -0
- package/dist/commonjs/i18n/index.d.ts +0 -9
- package/dist/commonjs/i18n/index.js +0 -15
- package/dist/commonjs/index.d.ts +0 -1
- package/dist/commonjs/index.js +18 -102
- 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 +168 -9
- 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 +7 -0
- package/dist/esm/constants/telemetryConfig.js +7 -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 +298 -0
- package/dist/esm/i18n/index.d.ts +0 -9
- package/dist/esm/i18n/index.js +0 -15
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.js +15 -98
- 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/components/Inspector/MainScreen.tsx +188 -2
- package/src/constants/telemetryConfig.ts +16 -0
- package/src/constants/version.ts +1 -1
- package/src/helpers/telemetry.ts +341 -0
- package/src/index.tsx +15 -2
- package/src/types/interfaces.ts +3 -0
|
@@ -60,9 +60,7 @@ const getOriginBadge = (originType) => {
|
|
|
60
60
|
const ReduxTab = React.memo(() => {
|
|
61
61
|
const { t } = useTranslation();
|
|
62
62
|
const { reduxState, reduxLastActionMap, reduxSearch, setReduxSearch, setSelectedReduxSlice, } = useInspector();
|
|
63
|
-
// Sort mode: 'latest' (newest updated first) vs 'alpha' (A-Z)
|
|
64
63
|
const [sortMode, setSortMode] = useState('latest');
|
|
65
|
-
// Pause / Live Auto-Refresh State
|
|
66
64
|
const [isReduxPaused, setIsReduxPaused] = useState(!getReduxAutoRefresh());
|
|
67
65
|
const handleTogglePause = useCallback(() => {
|
|
68
66
|
setIsReduxPaused(prev => {
|
|
@@ -71,15 +69,12 @@ const ReduxTab = React.memo(() => {
|
|
|
71
69
|
return next;
|
|
72
70
|
});
|
|
73
71
|
}, []);
|
|
74
|
-
// Total state size calculation
|
|
75
72
|
const totalStateSize = useMemo(() => {
|
|
76
73
|
return getSize(reduxState);
|
|
77
74
|
}, [reduxState]);
|
|
78
|
-
// Fetch full action history for timeline counts
|
|
79
75
|
const allActions = useMemo(() => {
|
|
80
76
|
return getActionHistory();
|
|
81
77
|
}, [reduxLastActionMap]);
|
|
82
|
-
// Compute slice items with exact timestamps & rich details
|
|
83
78
|
const sliceItems = useMemo(() => {
|
|
84
79
|
if (!reduxState || typeof reduxState !== 'object')
|
|
85
80
|
return [];
|
|
@@ -102,7 +97,6 @@ const ReduxTab = React.memo(() => {
|
|
|
102
97
|
keysCount = 1;
|
|
103
98
|
typeLabel = typeof sliceVal;
|
|
104
99
|
}
|
|
105
|
-
// Determine state status
|
|
106
100
|
let status = 'live';
|
|
107
101
|
let statusMessage;
|
|
108
102
|
if (isObject) {
|
|
@@ -127,7 +121,6 @@ const ReduxTab = React.memo(() => {
|
|
|
127
121
|
}
|
|
128
122
|
const lastActionRaw = reduxLastActionMap[key];
|
|
129
123
|
const updatedAt = lastActionRaw?.updatedAt || 0;
|
|
130
|
-
// Count actions affecting this slice in timeline
|
|
131
124
|
const timelineCount = allActions.filter(action => {
|
|
132
125
|
if (!action.affectedSlices || action.affectedSlices.length === 0)
|
|
133
126
|
return true;
|
|
@@ -173,7 +166,6 @@ const ReduxTab = React.memo(() => {
|
|
|
173
166
|
};
|
|
174
167
|
});
|
|
175
168
|
}, [reduxState, reduxLastActionMap, allActions]);
|
|
176
|
-
// Filter & Sort slices: by default, the most recently updated item is at the FIRST position
|
|
177
169
|
const filteredSlices = useMemo(() => {
|
|
178
170
|
let list = sliceItems;
|
|
179
171
|
if (reduxSearch && reduxSearch.trim().length > 0) {
|
|
@@ -194,7 +186,6 @@ const ReduxTab = React.memo(() => {
|
|
|
194
186
|
}
|
|
195
187
|
return [...list].sort((a, b) => {
|
|
196
188
|
if (sortMode === 'latest') {
|
|
197
|
-
// Most recently updated item first
|
|
198
189
|
if (b.updatedAt !== a.updatedAt) {
|
|
199
190
|
return b.updatedAt - a.updatedAt;
|
|
200
191
|
}
|
|
@@ -220,7 +211,7 @@ const ReduxTab = React.memo(() => {
|
|
|
220
211
|
reduxTabStyles.card,
|
|
221
212
|
isRecentlyUpdated && reduxTabStyles.cardRecentlyUpdated,
|
|
222
213
|
]}>
|
|
223
|
-
|
|
214
|
+
|
|
224
215
|
<View style={reduxTabStyles.cardHeader}>
|
|
225
216
|
<View style={reduxTabStyles.sliceBadge}>
|
|
226
217
|
<Text style={reduxTabStyles.sliceBadgeText}>SLICE</Text>
|
|
@@ -228,7 +219,7 @@ const ReduxTab = React.memo(() => {
|
|
|
228
219
|
|
|
229
220
|
<HighlightText text={item.name} search={reduxSearch} style={reduxTabStyles.sliceName} highlightStyle={reduxTabStyles.highlight}/>
|
|
230
221
|
|
|
231
|
-
|
|
222
|
+
|
|
232
223
|
{item.status === 'loading' ? (<View style={reduxTabStyles.loadingPill}>
|
|
233
224
|
<LoadingSpinnerIcon color={AppColors.amber800Warm} size={10}/>
|
|
234
225
|
<Text style={reduxTabStyles.loadingPillText}>Loading</Text>
|
|
@@ -252,7 +243,7 @@ const ReduxTab = React.memo(() => {
|
|
|
252
243
|
<ForwardChevronIcon color={AppColors.grayTextWeak} size={13}/>
|
|
253
244
|
</View>
|
|
254
245
|
|
|
255
|
-
|
|
246
|
+
|
|
256
247
|
<View style={reduxTabStyles.statsRow}>
|
|
257
248
|
<View style={reduxTabStyles.pill}>
|
|
258
249
|
<LayersIcon color={AppColors.grayTextWeak} size={11}/>
|
|
@@ -268,13 +259,13 @@ const ReduxTab = React.memo(() => {
|
|
|
268
259
|
</View>)}
|
|
269
260
|
</View>
|
|
270
261
|
|
|
271
|
-
|
|
262
|
+
|
|
272
263
|
{item.lastAction && (<View style={reduxTabStyles.lastActionRow}>
|
|
273
264
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 5, flex: 1, minWidth: 0, flexWrap: 'wrap' }}>
|
|
274
265
|
<BoltIcon color={AppColors.brandPurple} size={12}/>
|
|
275
266
|
<Text style={reduxTabStyles.lastActionLabel}>{t('redux.last', 'Last')}:</Text>
|
|
276
267
|
|
|
277
|
-
|
|
268
|
+
|
|
278
269
|
{item.lastAction.originType && (() => {
|
|
279
270
|
const origin = getOriginBadge(item.lastAction.originType);
|
|
280
271
|
return (<View style={{
|
|
@@ -302,7 +293,7 @@ const ReduxTab = React.memo(() => {
|
|
|
302
293
|
|
|
303
294
|
<HighlightText text={item.lastAction.type} search={reduxSearch} style={reduxTabStyles.lastActionValue} highlightStyle={reduxTabStyles.highlight} numberOfLines={1}/>
|
|
304
295
|
|
|
305
|
-
|
|
296
|
+
|
|
306
297
|
{item.lastAction.callerFile && (<Pressable onPress={() => openInVSCode(item.lastAction.callerFile, item.lastAction.callerLine, item.lastAction.callerCol)} hitSlop={6} style={{
|
|
307
298
|
flexDirection: 'row',
|
|
308
299
|
alignItems: 'center',
|
|
@@ -344,7 +335,7 @@ const ReduxTab = React.memo(() => {
|
|
|
344
335
|
</View>);
|
|
345
336
|
}
|
|
346
337
|
return (<View style={{ flex: 1, backgroundColor: AppColors.grayBackground }}>
|
|
347
|
-
|
|
338
|
+
|
|
348
339
|
<View style={reduxTabStyles.overviewCard}>
|
|
349
340
|
<View style={reduxTabStyles.statCol}>
|
|
350
341
|
<Text style={reduxTabStyles.statHeading}>ACTIVE SLICES</Text>
|
|
@@ -390,7 +381,7 @@ const ReduxTab = React.memo(() => {
|
|
|
390
381
|
</View>
|
|
391
382
|
</View>
|
|
392
383
|
|
|
393
|
-
|
|
384
|
+
|
|
394
385
|
<View style={reduxTabStyles.toolbarContainer}>
|
|
395
386
|
<View style={reduxTabStyles.searchRow}>
|
|
396
387
|
<View style={styles.searchContainer}>
|
|
@@ -417,7 +408,7 @@ const ReduxTab = React.memo(() => {
|
|
|
417
408
|
</View>)}
|
|
418
409
|
</View>
|
|
419
410
|
|
|
420
|
-
|
|
411
|
+
|
|
421
412
|
<TouchableOpacity accessible={true} accessibilityRole="button" accessibilityLabel={isReduxPaused
|
|
422
413
|
? 'Resume live Redux updates'
|
|
423
414
|
: 'Pause live Redux updates'} accessibilityHint="Toggles automatic recording of Redux state updates" style={[
|
|
@@ -432,7 +423,7 @@ const ReduxTab = React.memo(() => {
|
|
|
432
423
|
: AppColors.grayTextStrong} size={16}/>
|
|
433
424
|
</TouchableOpacity>
|
|
434
425
|
|
|
435
|
-
|
|
426
|
+
|
|
436
427
|
<TouchableOpacity accessible={true} accessibilityRole="button" accessibilityLabel={`Sort order: ${sortMode === 'latest'
|
|
437
428
|
? 'Recently updated first'
|
|
438
429
|
: 'Alphabetical A to Z'}`} accessibilityHint="Switches sorting between recently updated and alphabetical" style={[
|
|
@@ -461,7 +452,7 @@ const ReduxTab = React.memo(() => {
|
|
|
461
452
|
</View>
|
|
462
453
|
</View>
|
|
463
454
|
|
|
464
|
-
|
|
455
|
+
|
|
465
456
|
<FlatList data={filteredSlices} keyExtractor={item => item.id} renderItem={renderSliceItem} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} ListEmptyComponent={<EmptyState isSearch={reduxSearch.length > 0}/>} ListFooterComponent={filteredSlices.length > 0 ? (<EndOfListFooter count={filteredSlices.length} label="slices"/>) : null} contentContainerStyle={[
|
|
466
457
|
reduxTabStyles.listContent,
|
|
467
458
|
filteredSlices.length === 0 && { flexGrow: 1 },
|
|
@@ -31,7 +31,6 @@ const SettingsPanel = () => {
|
|
|
31
31
|
}, [modalHeightPercent]);
|
|
32
32
|
const autoRamProfile = calculateRamBasedLimits(deviceFreeRamMb);
|
|
33
33
|
const isPersistent = isPersistentStorageAvailable();
|
|
34
|
-
// Safe Area & Status Bar Padding for All Device Form Factors
|
|
35
34
|
const statusBarHeight = Platform.OS === 'android' ? StatusBar.currentHeight || 24 : 44;
|
|
36
35
|
const headerTopPadding = modalHeightPercent >= 95 ? statusBarHeight : 0;
|
|
37
36
|
const allModules = [
|
|
@@ -99,7 +98,6 @@ const SettingsPanel = () => {
|
|
|
99
98
|
desc: 'AsyncStorage & MMKV key-value store viewer with full CRUD support',
|
|
100
99
|
},
|
|
101
100
|
];
|
|
102
|
-
// Staged selection state for checkboxes before clicking "Save Changes"
|
|
103
101
|
const [stagedTabVisibility, setStagedTabVisibility] = useState(() => ({
|
|
104
102
|
apis: true,
|
|
105
103
|
logs: Boolean(tabVisibility?.logs),
|
|
@@ -111,7 +109,6 @@ const SettingsPanel = () => {
|
|
|
111
109
|
device: Boolean(tabVisibility?.device),
|
|
112
110
|
storage: Boolean(tabVisibility?.storage),
|
|
113
111
|
}));
|
|
114
|
-
// Synchronize staged state with tabVisibility when tabVisibility updates
|
|
115
112
|
useEffect(() => {
|
|
116
113
|
setStagedTabVisibility({
|
|
117
114
|
apis: true,
|
|
@@ -148,7 +145,6 @@ const SettingsPanel = () => {
|
|
|
148
145
|
animateNextLayout();
|
|
149
146
|
setSettingsPage('main');
|
|
150
147
|
};
|
|
151
|
-
// Helper: settings row with icon + label + optional description
|
|
152
148
|
const renderSettingRow = (opts) => {
|
|
153
149
|
return (<View style={{
|
|
154
150
|
paddingVertical: 12,
|
|
@@ -278,7 +274,7 @@ const SettingsPanel = () => {
|
|
|
278
274
|
backgroundColor: AppColors.grayBackground,
|
|
279
275
|
}}>
|
|
280
276
|
<ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, paddingBottom: 100, gap: 14 }} showsVerticalScrollIndicator={false}>
|
|
281
|
-
|
|
277
|
+
|
|
282
278
|
<View style={{
|
|
283
279
|
flexDirection: 'row',
|
|
284
280
|
backgroundColor: AppColors.primaryLight,
|
|
@@ -383,7 +379,7 @@ const SettingsPanel = () => {
|
|
|
383
379
|
</View>
|
|
384
380
|
|
|
385
381
|
{settingsActiveSubTab === 'module' && (<View style={{ gap: 12 }}>
|
|
386
|
-
|
|
382
|
+
|
|
387
383
|
<View style={{ gap: 10 }}>
|
|
388
384
|
{allModules.map(moduleItem => {
|
|
389
385
|
const isReduxAvail = isReduxConnected();
|
|
@@ -423,13 +419,13 @@ const SettingsPanel = () => {
|
|
|
423
419
|
shadowRadius: 5,
|
|
424
420
|
shadowOffset: { width: 0, height: 2 },
|
|
425
421
|
}}>
|
|
426
|
-
|
|
422
|
+
|
|
427
423
|
<View style={{
|
|
428
424
|
flexDirection: 'row',
|
|
429
425
|
alignItems: 'flex-start',
|
|
430
426
|
gap: 10,
|
|
431
427
|
}}>
|
|
432
|
-
|
|
428
|
+
|
|
433
429
|
<TouchableScale accessible={true} accessibilityRole="checkbox" accessibilityLabel={`Select ${moduleItem.label}`} accessibilityState={{
|
|
434
430
|
checked: isChecked,
|
|
435
431
|
disabled: isLocked,
|
|
@@ -469,7 +465,7 @@ const SettingsPanel = () => {
|
|
|
469
465
|
</Svg>) : null}
|
|
470
466
|
</TouchableScale>
|
|
471
467
|
|
|
472
|
-
|
|
468
|
+
|
|
473
469
|
<TouchableScale accessible={true} accessibilityRole="button" accessibilityLabel={`${moduleItem.label} settings`} disabled={isUnavailable} onPress={() => {
|
|
474
470
|
animateNextLayout();
|
|
475
471
|
setSettingsPage(moduleItem.key);
|
|
@@ -479,7 +475,7 @@ const SettingsPanel = () => {
|
|
|
479
475
|
alignItems: 'flex-start',
|
|
480
476
|
gap: 10,
|
|
481
477
|
}}>
|
|
482
|
-
|
|
478
|
+
|
|
483
479
|
<View style={{
|
|
484
480
|
width: 36,
|
|
485
481
|
height: 36,
|
|
@@ -528,7 +524,7 @@ const SettingsPanel = () => {
|
|
|
528
524
|
: AppColors.grayTextWeak} size={16}/>)}
|
|
529
525
|
</View>
|
|
530
526
|
|
|
531
|
-
|
|
527
|
+
|
|
532
528
|
<View style={{ flex: 1, gap: 2 }}>
|
|
533
529
|
<View style={{
|
|
534
530
|
flexDirection: 'row',
|
|
@@ -547,7 +543,7 @@ const SettingsPanel = () => {
|
|
|
547
543
|
{moduleItem.label}
|
|
548
544
|
</Text>
|
|
549
545
|
|
|
550
|
-
|
|
546
|
+
|
|
551
547
|
{moduleItem.key === defaultTab &&
|
|
552
548
|
!isUnavailable && (<View style={{
|
|
553
549
|
flexDirection: 'row',
|
|
@@ -577,7 +573,7 @@ const SettingsPanel = () => {
|
|
|
577
573
|
</Text>
|
|
578
574
|
</View>)}
|
|
579
575
|
|
|
580
|
-
|
|
576
|
+
|
|
581
577
|
{moduleItem.key === 'apis' ? (<View style={{
|
|
582
578
|
backgroundColor: `${AppColors.blue500}14`,
|
|
583
579
|
borderRadius: 4,
|
|
@@ -664,7 +660,7 @@ const SettingsPanel = () => {
|
|
|
664
660
|
</TouchableScale>
|
|
665
661
|
</View>
|
|
666
662
|
|
|
667
|
-
|
|
663
|
+
|
|
668
664
|
{!isUnavailable && (<View style={{
|
|
669
665
|
flexDirection: 'row',
|
|
670
666
|
alignItems: 'center',
|
|
@@ -673,7 +669,7 @@ const SettingsPanel = () => {
|
|
|
673
669
|
borderTopWidth: 1,
|
|
674
670
|
borderTopColor: AppColors.dividerColor,
|
|
675
671
|
}}>
|
|
676
|
-
|
|
672
|
+
|
|
677
673
|
<View style={{
|
|
678
674
|
flexDirection: 'row',
|
|
679
675
|
alignItems: 'center',
|
|
@@ -698,7 +694,7 @@ const SettingsPanel = () => {
|
|
|
698
694
|
</Text>
|
|
699
695
|
</View>
|
|
700
696
|
|
|
701
|
-
|
|
697
|
+
|
|
702
698
|
<TouchableScale accessible={true} accessibilityRole="button" accessibilityLabel={`Configure ${moduleItem.label} settings`} onPress={() => {
|
|
703
699
|
animateNextLayout();
|
|
704
700
|
setSettingsPage(moduleItem.key);
|
|
@@ -731,7 +727,7 @@ const SettingsPanel = () => {
|
|
|
731
727
|
</View>)}
|
|
732
728
|
|
|
733
729
|
{settingsActiveSubTab === 'ui' && (<View style={{ gap: 14 }}>
|
|
734
|
-
|
|
730
|
+
|
|
735
731
|
<View style={{
|
|
736
732
|
backgroundColor: AppColors.primaryLight,
|
|
737
733
|
borderRadius: 14,
|
|
@@ -822,7 +818,7 @@ const SettingsPanel = () => {
|
|
|
822
818
|
</View>
|
|
823
819
|
</View>
|
|
824
820
|
|
|
825
|
-
|
|
821
|
+
|
|
826
822
|
<View style={{
|
|
827
823
|
backgroundColor: AppColors.primaryLight,
|
|
828
824
|
borderRadius: 14,
|
|
@@ -842,7 +838,7 @@ const SettingsPanel = () => {
|
|
|
842
838
|
{t('settings.windowLayout')}
|
|
843
839
|
</Text>
|
|
844
840
|
|
|
845
|
-
|
|
841
|
+
|
|
846
842
|
<View style={{ gap: 8 }}>
|
|
847
843
|
<View style={{
|
|
848
844
|
flexDirection: 'row',
|
|
@@ -921,7 +917,7 @@ const SettingsPanel = () => {
|
|
|
921
917
|
|
|
922
918
|
<View style={{ height: 1, backgroundColor: AppColors.dividerColor }}/>
|
|
923
919
|
|
|
924
|
-
|
|
920
|
+
|
|
925
921
|
<View style={{ gap: 8 }}>
|
|
926
922
|
<View style={{
|
|
927
923
|
flexDirection: 'row',
|
|
@@ -998,7 +994,7 @@ const SettingsPanel = () => {
|
|
|
998
994
|
</View>
|
|
999
995
|
</View>
|
|
1000
996
|
|
|
1001
|
-
|
|
997
|
+
|
|
1002
998
|
<View style={{
|
|
1003
999
|
backgroundColor: AppColors.primaryLight,
|
|
1004
1000
|
borderRadius: 14,
|
|
@@ -1054,7 +1050,7 @@ const SettingsPanel = () => {
|
|
|
1054
1050
|
</View>
|
|
1055
1051
|
</View>
|
|
1056
1052
|
|
|
1057
|
-
|
|
1053
|
+
|
|
1058
1054
|
<View style={{ marginTop: 6, gap: 6 }}>
|
|
1059
1055
|
<TouchableScale accessible={true} accessibilityRole="button" accessibilityLabel={`Default opening tab: ${allModules.find(m => m.key === defaultTab)?.label || 'APIs'}`} onPress={() => setIsDefaultTabDropdownOpen(prev => !prev)} style={{
|
|
1060
1056
|
flexDirection: 'row',
|
|
@@ -1115,7 +1111,7 @@ const SettingsPanel = () => {
|
|
|
1115
1111
|
</View>
|
|
1116
1112
|
</TouchableScale>
|
|
1117
1113
|
|
|
1118
|
-
|
|
1114
|
+
|
|
1119
1115
|
{isDefaultTabDropdownOpen && (<View style={{
|
|
1120
1116
|
backgroundColor: AppColors.primaryLight,
|
|
1121
1117
|
borderRadius: 10,
|
|
@@ -1182,7 +1178,7 @@ const SettingsPanel = () => {
|
|
|
1182
1178
|
</View>
|
|
1183
1179
|
</View>
|
|
1184
1180
|
|
|
1185
|
-
|
|
1181
|
+
|
|
1186
1182
|
<View style={{
|
|
1187
1183
|
backgroundColor: AppColors.primaryLight,
|
|
1188
1184
|
borderRadius: 14,
|
|
@@ -1271,7 +1267,7 @@ const SettingsPanel = () => {
|
|
|
1271
1267
|
</View>
|
|
1272
1268
|
</View>
|
|
1273
1269
|
|
|
1274
|
-
|
|
1270
|
+
|
|
1275
1271
|
<View style={{
|
|
1276
1272
|
backgroundColor: AppColors.primaryLight,
|
|
1277
1273
|
borderRadius: 14,
|
|
@@ -1399,7 +1395,7 @@ const SettingsPanel = () => {
|
|
|
1399
1395
|
</View>)}
|
|
1400
1396
|
|
|
1401
1397
|
{settingsActiveSubTab === 'limits' && (<View style={{ gap: 14 }}>
|
|
1402
|
-
|
|
1398
|
+
|
|
1403
1399
|
<View style={{
|
|
1404
1400
|
backgroundColor: AppColors.primaryLight,
|
|
1405
1401
|
borderRadius: 14,
|
|
@@ -1419,7 +1415,7 @@ const SettingsPanel = () => {
|
|
|
1419
1415
|
DEVICE MEMORY & AUTO PROFILES
|
|
1420
1416
|
</Text>
|
|
1421
1417
|
|
|
1422
|
-
|
|
1418
|
+
|
|
1423
1419
|
<View style={{
|
|
1424
1420
|
flexDirection: 'row',
|
|
1425
1421
|
alignItems: 'center',
|
|
@@ -1490,7 +1486,7 @@ const SettingsPanel = () => {
|
|
|
1490
1486
|
|
|
1491
1487
|
<View style={{ height: 1, backgroundColor: AppColors.dividerColor }}/>
|
|
1492
1488
|
|
|
1493
|
-
|
|
1489
|
+
|
|
1494
1490
|
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 10 }}>
|
|
1495
1491
|
<View style={{
|
|
1496
1492
|
width: 32,
|
|
@@ -1552,7 +1548,7 @@ const SettingsPanel = () => {
|
|
|
1552
1548
|
</View>
|
|
1553
1549
|
</View>
|
|
1554
1550
|
|
|
1555
|
-
|
|
1551
|
+
|
|
1556
1552
|
<View style={{
|
|
1557
1553
|
marginTop: 4,
|
|
1558
1554
|
paddingTop: 8,
|
|
@@ -1655,7 +1651,7 @@ const SettingsPanel = () => {
|
|
|
1655
1651
|
</View>
|
|
1656
1652
|
</View>
|
|
1657
1653
|
|
|
1658
|
-
|
|
1654
|
+
|
|
1659
1655
|
<View style={{
|
|
1660
1656
|
backgroundColor: AppColors.primaryLight,
|
|
1661
1657
|
borderRadius: 14,
|
|
@@ -1723,7 +1719,7 @@ const SettingsPanel = () => {
|
|
|
1723
1719
|
|
|
1724
1720
|
<View style={{ height: 1, backgroundColor: AppColors.dividerColor }}/>
|
|
1725
1721
|
|
|
1726
|
-
|
|
1722
|
+
|
|
1727
1723
|
<View style={{
|
|
1728
1724
|
flexDirection: 'row',
|
|
1729
1725
|
alignItems: 'center',
|
|
@@ -1774,7 +1770,7 @@ const SettingsPanel = () => {
|
|
|
1774
1770
|
<View style={{ height: 48 }}/>
|
|
1775
1771
|
</ScrollView>
|
|
1776
1772
|
|
|
1777
|
-
|
|
1773
|
+
|
|
1778
1774
|
{settingsActiveSubTab === 'module' && (<View style={{
|
|
1779
1775
|
paddingHorizontal: 16,
|
|
1780
1776
|
paddingTop: 12,
|
|
@@ -1996,7 +1992,7 @@ const SettingsPanel = () => {
|
|
|
1996
1992
|
})}
|
|
1997
1993
|
</View>
|
|
1998
1994
|
|
|
1999
|
-
|
|
1995
|
+
|
|
2000
1996
|
<View style={{
|
|
2001
1997
|
backgroundColor: AppColors.primaryLight,
|
|
2002
1998
|
borderRadius: 14,
|
|
@@ -2016,7 +2012,7 @@ const SettingsPanel = () => {
|
|
|
2016
2012
|
{t('settings.logFiltersDeduplication')}
|
|
2017
2013
|
</Text>
|
|
2018
2014
|
|
|
2019
|
-
|
|
2015
|
+
|
|
2020
2016
|
<View style={{
|
|
2021
2017
|
flexDirection: 'row',
|
|
2022
2018
|
alignItems: 'center',
|
|
@@ -2555,7 +2551,7 @@ const SettingsPanel = () => {
|
|
|
2555
2551
|
flex: 1,
|
|
2556
2552
|
backgroundColor: AppColors.grayBackground,
|
|
2557
2553
|
}}>
|
|
2558
|
-
|
|
2554
|
+
|
|
2559
2555
|
<View style={[
|
|
2560
2556
|
StyleSheet.absoluteFill,
|
|
2561
2557
|
settingsPage !== 'main' && { pointerEvents: 'none' },
|
|
@@ -2563,7 +2559,7 @@ const SettingsPanel = () => {
|
|
|
2563
2559
|
{renderMainSettingsContent()}
|
|
2564
2560
|
</View>
|
|
2565
2561
|
|
|
2566
|
-
|
|
2562
|
+
|
|
2567
2563
|
{settingsPage !== 'main' && (<Animated.View style={[
|
|
2568
2564
|
StyleSheet.absoluteFill,
|
|
2569
2565
|
{
|
|
@@ -20,7 +20,7 @@ export const SkeletonPlaceholder = React.memo(function SkeletonPlaceholder({ car
|
|
|
20
20
|
return () => animation.stop();
|
|
21
21
|
}, [shimmerAnim]);
|
|
22
22
|
return (<View style={skeletonStyles.container}>
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
<View style={skeletonStyles.toolbarSkeleton}>
|
|
25
25
|
<Animated.View style={[
|
|
26
26
|
skeletonStyles.searchBarSkeleton,
|
|
@@ -32,7 +32,7 @@ export const SkeletonPlaceholder = React.memo(function SkeletonPlaceholder({ car
|
|
|
32
32
|
</View>
|
|
33
33
|
</View>
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
<View style={skeletonStyles.chipStripSkeleton}>
|
|
37
37
|
<Animated.View style={[skeletonStyles.chipSkeleton, { width: 48, opacity: shimmerAnim }]}/>
|
|
38
38
|
<Animated.View style={[skeletonStyles.chipSkeleton, { width: 68, opacity: shimmerAnim }]}/>
|
|
@@ -40,9 +40,9 @@ export const SkeletonPlaceholder = React.memo(function SkeletonPlaceholder({ car
|
|
|
40
40
|
<Animated.View style={[skeletonStyles.chipSkeleton, { width: 58, opacity: shimmerAnim }]}/>
|
|
41
41
|
</View>
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
{Array.from({ length: cardCount }).map((_, i) => (<Animated.View key={`skeleton_card_${i}`} style={[skeletonStyles.cardSkeleton, { opacity: shimmerAnim }]}>
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
<View style={skeletonStyles.cardTopRow}>
|
|
47
47
|
<View style={skeletonStyles.badgeGroup}>
|
|
48
48
|
<View style={skeletonStyles.statusBadgeSkeleton}/>
|
|
@@ -51,11 +51,11 @@ export const SkeletonPlaceholder = React.memo(function SkeletonPlaceholder({ car
|
|
|
51
51
|
<View style={skeletonStyles.timeSkeleton}/>
|
|
52
52
|
</View>
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
|
|
55
55
|
<View style={skeletonStyles.urlLineLong}/>
|
|
56
56
|
<View style={skeletonStyles.urlLineShort}/>
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
<View style={skeletonStyles.cardBottomRow}>
|
|
60
60
|
<View style={skeletonStyles.metaPillSkeleton}/>
|
|
61
61
|
<View style={skeletonStyles.metaPillSkeleton}/>
|