|
1 | | -import { Show, createEffect, createSignal } from 'solid-js' |
| 1 | +import { Show, createEffect, createSignal, onCleanup } from 'solid-js' |
2 | 2 | import { createShortcut } from '@solid-primitives/keyboard' |
3 | 3 | import { Portal } from 'solid-js/web' |
4 | 4 | import { ThemeContextProvider } from '@tanstack/devtools-ui' |
| 5 | +import { devtoolsEventClient } from '@tanstack/devtools-client' |
5 | 6 | import { |
6 | 7 | useDevtoolsSettings, |
7 | 8 | useHeight, |
@@ -31,14 +32,36 @@ export default function DevTools() { |
31 | 32 | const pip = usePiPWindow() |
32 | 33 | let panelRef: HTMLDivElement | undefined = undefined |
33 | 34 | const [isResizing, setIsResizing] = createSignal(false) |
| 35 | + |
34 | 36 | const toggleOpen = () => { |
35 | 37 | if (pip().pipWindow) { |
36 | 38 | return |
37 | 39 | } |
38 | 40 | const open = isOpen() |
39 | | - setIsOpen(!open) |
40 | | - setPersistOpen(!open) |
| 41 | + const newState = !open |
| 42 | + setIsOpen(newState) |
| 43 | + setPersistOpen(newState) |
| 44 | + |
| 45 | + // Emit event when user toggles devtools |
| 46 | + devtoolsEventClient.emit('trigger-toggled', { isOpen: newState }) |
41 | 47 | } |
| 48 | + |
| 49 | + // Listen for trigger-toggled events to control devtools |
| 50 | + createEffect(() => { |
| 51 | + const unsubscribe = devtoolsEventClient.on('trigger-toggled', (event) => { |
| 52 | + if (pip().pipWindow) { |
| 53 | + return |
| 54 | + } |
| 55 | + const payload = event.payload as unknown as { isOpen: boolean } |
| 56 | + const shouldBeOpen = payload.isOpen |
| 57 | + if (shouldBeOpen !== isOpen()) { |
| 58 | + setIsOpen(shouldBeOpen) |
| 59 | + setPersistOpen(shouldBeOpen) |
| 60 | + } |
| 61 | + }) |
| 62 | + |
| 63 | + onCleanup(unsubscribe) |
| 64 | + }) |
42 | 65 | // Used to resize the panel |
43 | 66 | const handleDragStart = ( |
44 | 67 | panelElement: HTMLDivElement | undefined, |
|
0 commit comments