diff --git a/src/ui/Xenon.tsx b/src/ui/Xenon.tsx index 0b6f117..2ab2b1d 100644 --- a/src/ui/Xenon.tsx +++ b/src/ui/Xenon.tsx @@ -1,5 +1,12 @@ import { enableMapSet } from 'immer'; -import { createRef, memo, useImperativeHandle, useRef, type NamedExoticComponent } from 'react'; +import { + createRef, + memo, + useImperativeHandle, + useMemo, + useRef, + type NamedExoticComponent, +} from 'react'; import { Animated, StyleSheet, useWindowDimensions } from 'react-native'; import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; import { useImmer } from 'use-immer'; @@ -48,6 +55,11 @@ const XenonComponent = memo( selectedPanel: DebuggerPanel.Network, }); + const detailsShown = useMemo( + () => !debuggerState.selectedPanel && !!detailsData.value, + [debuggerState.selectedPanel], + ); + const networkInterceptor = useNetworkInterceptor({ autoEnabled: autoInspectNetworkEnabled, }); @@ -103,10 +115,10 @@ const XenonComponent = memo( ]} > - + {debuggerState.selectedPanel === DebuggerPanel.Network && } {debuggerState.selectedPanel === DebuggerPanel.Console && } - {!debuggerState.selectedPanel && !!detailsData.value && } + {detailsShown && } ); diff --git a/src/ui/components/headers/DebuggerHeader.tsx b/src/ui/components/headers/DebuggerHeader.tsx index 8b2edc6..00e702e 100644 --- a/src/ui/components/headers/DebuggerHeader.tsx +++ b/src/ui/components/headers/DebuggerHeader.tsx @@ -1,15 +1,23 @@ -import { useContext } from 'react'; +import { useContext, useRef } from 'react'; import { ScrollView, StyleSheet, View } from 'react-native'; import { MainContext } from '../../../contexts'; +import colors from '../../../theme/colors'; +import icons from '../../../theme/icons'; import { DebuggerPanel } from '../../../types'; import DebuggerHeaderItem from '../items/DebuggerHeaderItem'; -import icons from '../../../theme/icons'; -import colors from '../../../theme/colors'; -export default function DebuggerHeader() { +interface DebuggerHeaderProps { + detailsShown: boolean; +} + +export default function DebuggerHeader({ detailsShown }: DebuggerHeaderProps) { const { debuggerState, setDebuggerState, networkInterceptor, logInterceptor } = useContext(MainContext)!; + const lastSelectedPanel = useRef( + debuggerState.selectedPanel ?? DebuggerPanel.Network, + ); + const hideDebugger = () => { setDebuggerState(draft => { draft.visibility = 'bubble'; @@ -34,17 +42,29 @@ export default function DebuggerHeader() { }); }; - const switchToNetworkPanel = () => { + const switchTo = (debuggerPanel: DebuggerPanel) => { setDebuggerState(draft => { - draft.selectedPanel = DebuggerPanel.Network; + draft.selectedPanel = debuggerPanel; + lastSelectedPanel.current = debuggerPanel; }); }; - const switchToConsolePanel = () => { - setDebuggerState(draft => { - draft.selectedPanel = DebuggerPanel.Console; - }); - }; + if (detailsShown) { + return ( + + { + setDebuggerState(draft => { + draft.selectedPanel = lastSelectedPanel.current; + }); + }} + /> + + ); + } return ( switchTo(DebuggerPanel.Network)} /> switchTo(DebuggerPanel.Console)} />