Skip to content

Commit 8b77b93

Browse files
committed
refactor: consolidate overlay components and add setup validation
- Remove NetworkLoggerOverlay, consolidate into DebuggerOverlay - Add enableWebSocket prop (default: false) to control WebSocket tab visibility - Add isSetup() method to both networkLogger and webSocketLogger - Add DebuggerSetupError with helpful error messages when: - networkLogger.setupInterceptor() not called - enableWebSocket=true but webSocketLogger not provided - enableWebSocket=true but webSocketLogger.setupInterceptor() not called - enableDeviceShake=true but react-native-shake not installed - Update README with new API documentation - Update example app to use enableWebSocket prop
1 parent 409558a commit 8b77b93

8 files changed

Lines changed: 197 additions & 695 deletions

File tree

README.md

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export default function App() {
109109

110110
### 2. Full Setup (HTTP + WebSocket)
111111

112-
Use `DebuggerOverlay` for the unified tabbed interface with both HTTP and WebSocket support.
112+
Use `DebuggerOverlay` with `enableWebSocket={true}` for the unified tabbed interface.
113113

114114
```tsx
115115
import React, { useEffect } from 'react';
@@ -136,6 +136,7 @@ export default function App() {
136136
<DebuggerOverlay
137137
networkLogger={networkLogger}
138138
webSocketLogger={webSocketLogger}
139+
enableWebSocket={true}
139140
draggable={false}
140141
/>
141142
</View>
@@ -168,6 +169,7 @@ export default function App() {
168169
<DebuggerOverlay
169170
networkLogger={networkLogger}
170171
webSocketLogger={webSocketLogger}
172+
enableWebSocket={true}
171173
draggable={true}
172174
/>
173175
</GestureHandlerRootView>
@@ -181,6 +183,7 @@ export default function App() {
181183
<DebuggerOverlay
182184
networkLogger={networkLogger}
183185
webSocketLogger={webSocketLogger}
186+
enableWebSocket={true}
184187
draggable={true}
185188
enableDeviceShake={true}
186189
useCopyToClipboard={true}
@@ -384,29 +387,14 @@ webSocketLogger.restoreInterceptor();
384387

385388
### DebuggerOverlay Props
386389

387-
The unified overlay component with HTTP and WebSocket tabs.
390+
The unified overlay component with HTTP and optional WebSocket tabs.
388391

389392
| Prop | Type | Default | Description |
390393
|------|------|---------|-------------|
391394
| `networkLogger` | `NetworkLogger` | Required | HTTP logger instance |
392-
| `webSocketLogger` | `WebSocketLogger` | Optional | WebSocket logger instance |
393-
| `enabled` | `boolean` | `__DEV__` | Enable/disable the overlay |
394-
| `draggable` | `boolean` | `false` | Enable draggable button |
395-
| `enableDeviceShake` | `boolean` | `false` | Show on device shake |
396-
| `useCopyToClipboard` | `boolean` | `false` | Enable clipboard copy |
397-
| `showRequestHeader` | `boolean` | `false` | Show request headers |
398-
| `showResponseHeader` | `boolean` | `false` | Show response headers |
399-
| `theme` | `'light' \| 'dark'` | `'dark'` | Color theme |
400-
| `onThemeChange` | `(theme) => void` | - | Theme change callback |
401-
402-
### NetworkLoggerOverlay Props
403-
404-
HTTP-only overlay component (legacy, use `DebuggerOverlay` for new projects).
405-
406-
| Prop | Type | Default | Description |
407-
|------|------|---------|-------------|
408-
| `networkLogger` | `NetworkLogger` | Required | The logger instance |
395+
| `webSocketLogger` | `WebSocketLogger` | - | WebSocket logger instance (required if `enableWebSocket` is true) |
409396
| `enabled` | `boolean` | `__DEV__` | Enable/disable the overlay |
397+
| `enableWebSocket` | `boolean` | `false` | Enable WebSocket debugging tab |
410398
| `draggable` | `boolean` | `false` | Enable draggable button |
411399
| `enableDeviceShake` | `boolean` | `false` | Show on device shake |
412400
| `useCopyToClipboard` | `boolean` | `false` | Enable clipboard copy |
@@ -553,16 +541,29 @@ useEffect(() => {
553541

554542
### WebSocket connections not appearing
555543

556-
Ensure the WebSocket interceptor is set up before any WebSocket connections are created, and pass the `webSocketLogger` to `DebuggerOverlay`:
544+
Ensure you have:
545+
1. Called `webSocketLogger.setupInterceptor()` before any WebSocket connections
546+
2. Set `enableWebSocket={true}` on the DebuggerOverlay
547+
3. Passed the `webSocketLogger` prop
557548

558549
```tsx
559550
<DebuggerOverlay
560551
networkLogger={networkLogger}
561-
webSocketLogger={webSocketLogger} // Don't forget this!
552+
webSocketLogger={webSocketLogger}
553+
enableWebSocket={true} // Required to show WebSocket tab
562554
draggable={true}
563555
/>
564556
```
565557

558+
### Setup error messages
559+
560+
The debugger will throw helpful error messages if interceptors aren't initialized:
561+
562+
- **HTTP**: If `networkLogger.setupInterceptor()` wasn't called before rendering
563+
- **WebSocket**: If `enableWebSocket={true}` but `webSocketLogger.setupInterceptor()` wasn't called
564+
565+
These errors include code examples to help you fix the issue quickly.
566+
566567
---
567568

568569
## Contributing

example/src/App.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import React, { useEffect, useState } from 'react';
22
import { StyleSheet, SafeAreaView, View } from 'react-native';
3-
import { networkLogger, NetworkLoggerOverlay } from 'react-native-api-debugger';
3+
import {
4+
DebuggerOverlay,
5+
networkLogger,
6+
webSocketLogger,
7+
} from 'react-native-api-debugger';
48
import { GestureHandlerRootView } from 'react-native-gesture-handler';
59
import { NetworkScreen } from './screens/NetworkScreen';
610
import { WebSocketScreen } from './screens/WebSocketScreen';
@@ -23,6 +27,7 @@ const App: React.FC = () => {
2327
slowRequestThreshold: 2000,
2428
});
2529
networkLogger.setupInterceptor();
30+
webSocketLogger.setupInterceptor();
2631
}, []);
2732

2833
const renderScreen = () => {
@@ -49,13 +54,15 @@ const App: React.FC = () => {
4954
activeTab={activeTab}
5055
onTabPress={setActiveTab}
5156
/>
52-
<NetworkLoggerOverlay
57+
<DebuggerOverlay
5358
draggable={true}
5459
enableDeviceShake={false}
5560
useCopyToClipboard={true}
5661
showRequestHeader={showHeaders}
5762
showResponseHeader={showHeaders}
5863
networkLogger={networkLogger}
64+
webSocketLogger={webSocketLogger}
65+
enableWebSocket={true}
5966
/>
6067
</SafeAreaView>
6168
</GestureHandlerRootView>

0 commit comments

Comments
 (0)