1- import { msg , warn } from '@ solid-devtools/shared/utils '
1+ import * as s from 'solid-js '
22import { scheduleIdle , throttle } from '@solid-primitives/scheduled'
3- import { type Accessor , createEffect , onCleanup } from 'solid-js'
4- import { type OutputEmit } from '../main/index.ts'
3+ import { msg , warn } from '@solid-devtools/shared/utils'
54import { ObjectType , getObjectById } from '../main/id.ts'
65import { addSolidUpdateListener } from '../main/observe.ts'
7- import { type Mapped , type NodeID , type Solid , type ValueItemID } from '../main/types.ts'
6+ import { type InspectedState , type Mapped , type NodeID , type OutputEmit , type Solid , type ValueItemID } from '../main/types.ts'
87import { onOwnerDispose } from '../main/utils.ts'
8+ import setup from '../main/setup.ts'
9+ import { UNOWNED_ROOT } from '../main/roots.ts'
910import { type ObservedPropsMap , ValueNodeMap , clearOwnerObservers , collectOwnerDetails } from './inspector.ts'
1011import { encodeValue } from './serialize.ts'
1112import { type StoreNodeProperty , type StoreUpdateData , observeStoreNode , setOnStoreNodeUpdate } from './store.ts'
@@ -19,8 +20,8 @@ export type ToggleInspectedValueData = {id: ValueItemID; selected: boolean}
1920 * Plugin module
2021 */
2122export function createInspector ( props : {
22- inspectedOwnerId : Accessor < NodeID | null >
23- enabled : Accessor < boolean >
23+ inspectedState : s . Accessor < InspectedState >
24+ enabled : s . Accessor < boolean >
2425 resetInspectedNode : VoidFunction
2526 emit : OutputEmit
2627} ) {
@@ -146,46 +147,63 @@ export function createInspector(props: {
146147
147148 let clearPrevDisposeListener : VoidFunction | undefined
148149
149- createEffect ( ( ) => {
150- if ( ! props . enabled ( ) ) return
151- const id = props . inspectedOwnerId ( )
152-
153- queueMicrotask ( ( ) => {
154- const owner = id && getObjectById ( id , ObjectType . Owner )
155- inspectedOwner && clearOwnerObservers ( inspectedOwner , propsMap )
156- inspectedOwner = owner
157- valueMap . reset ( )
158- clearUpdates ( )
159-
160- if ( owner ) {
161- const result = collectOwnerDetails ( owner , {
162- onValueUpdate : pushValueUpdate ,
163- onPropStateChange : pushPropState ,
164- observedPropsMap : propsMap ,
165- } )
166-
167- props . emit ( msg ( 'InspectedNodeDetails' , result . details ) )
168-
169- valueMap = result . valueMap
170- lastDetails = result . details
171- checkProxyProps = result . checkProxyProps || null
172- } else {
173- lastDetails = undefined
174- checkProxyProps = null
175- }
150+
151+
152+ function inspectOwnerId ( id : NodeID | null ) : void {
153+
154+ const owner = id && getObjectById ( id , ObjectType . Owner )
155+ if ( inspectedOwner ) clearOwnerObservers ( inspectedOwner , propsMap )
156+ inspectedOwner = owner
157+
158+ valueMap . reset ( )
159+ clearUpdates ( )
160+
161+ if ( owner ) {
162+ const result = collectOwnerDetails ( owner , {
163+ onValueUpdate : pushValueUpdate ,
164+ onPropStateChange : pushPropState ,
165+ observedPropsMap : propsMap ,
166+ } )
167+
168+ props . emit ( msg ( 'InspectedNodeDetails' , result . details ) )
169+
170+ valueMap = result . valueMap
171+ lastDetails = result . details
172+ checkProxyProps = result . checkProxyProps || null
173+ } else {
174+ lastDetails = undefined
175+ checkProxyProps = null
176+ }
177+
178+ clearPrevDisposeListener ?.( )
179+ clearPrevDisposeListener = owner
180+ ? onOwnerDispose ( owner , props . resetInspectedNode )
181+ : undefined
182+ }
176183
177- clearPrevDisposeListener ?.( )
178- clearPrevDisposeListener = owner
179- ? onOwnerDispose ( owner , props . resetInspectedNode )
180- : undefined
181- } )
184+ const inspectedOwnerId = s . createMemo (
185+ ( ) => props . enabled ( )
186+ ? props . inspectedState ( ) . ownerId
187+ : null
188+ )
189+ s . createEffect ( ( ) => {
190+ let id = inspectedOwnerId ( )
191+ s . untrack ( ( ) => inspectOwnerId ( id ) )
182192 } )
183193
184- createEffect ( ( ) => {
194+ function onUnownedRootChange ( ) {
195+ if ( inspectedOwner === UNOWNED_ROOT ) {
196+ inspectOwnerId ( inspectedOwnerId ( ) )
197+ }
198+ }
199+ setup . unowned . onSignalAdded = onUnownedRootChange
200+ setup . unowned . onSignalRemoved = onUnownedRootChange
201+
202+ s . createEffect ( ( ) => {
185203 if ( ! props . enabled ( ) ) return
186204
187205 // Check if proxy props have changed keys after each update queue
188- onCleanup ( addSolidUpdateListener ( ( ) => checkProxyProps && triggerPropsCheck ( ) ) )
206+ s . onCleanup ( addSolidUpdateListener ( ( ) => checkProxyProps && triggerPropsCheck ( ) ) )
189207 } )
190208
191209 return {
0 commit comments