Skip to content

Commit f02a894

Browse files
add custom trigger handling (#250)
* add custom trigger handling * ci: apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
1 parent d524864 commit f02a894

File tree

3 files changed

+35
-3
lines changed

3 files changed

+35
-3
lines changed

.changeset/hungry-tables-strive.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@tanstack/devtools-client': patch
3+
'@tanstack/devtools': patch
4+
---
5+
6+
add the ability to open up devtools programatically

packages/devtools-client/src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ interface EventMap {
8383
'tanstack-devtools-core:package-json-updated': {
8484
packageJson: PackageJson | null
8585
}
86+
'tanstack-devtools-core:trigger-toggled': {
87+
isOpen: boolean
88+
}
8689
}
8790

8891
export class DevtoolsEventClient extends EventClient<EventMap> {

packages/devtools/src/devtools.tsx

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { Show, createEffect, createSignal } from 'solid-js'
1+
import { Show, createEffect, createSignal, onCleanup } from 'solid-js'
22
import { createShortcut } from '@solid-primitives/keyboard'
33
import { Portal } from 'solid-js/web'
44
import { ThemeContextProvider } from '@tanstack/devtools-ui'
5+
import { devtoolsEventClient } from '@tanstack/devtools-client'
56
import {
67
useDevtoolsSettings,
78
useHeight,
@@ -31,14 +32,36 @@ export default function DevTools() {
3132
const pip = usePiPWindow()
3233
let panelRef: HTMLDivElement | undefined = undefined
3334
const [isResizing, setIsResizing] = createSignal(false)
35+
3436
const toggleOpen = () => {
3537
if (pip().pipWindow) {
3638
return
3739
}
3840
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 })
4147
}
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+
})
4265
// Used to resize the panel
4366
const handleDragStart = (
4467
panelElement: HTMLDivElement | undefined,

0 commit comments

Comments
 (0)