22import type { CustomInspectorNode , CustomInspectorState } from ' @vue/devtools-kit'
33import { DevToolsMessagingEvents , rpc } from ' @vue/devtools-core'
44import { parse } from ' @vue/devtools-kit'
5- import { until } from ' @vueuse/core'
5+ import { VueInput } from ' @vue/devtools-ui'
6+ import { until , useToggle , watchDebounced } from ' @vueuse/core'
67import { Pane , Splitpanes } from ' splitpanes'
78import { computed , onUnmounted , ref , watch } from ' vue'
89import DevToolsHeader from ' ~/components/basic/DevToolsHeader.vue'
@@ -21,6 +22,8 @@ const customInspectState = useCustomInspectorState()
2122const inspectorId = computed (() => customInspectState .value .id ! )
2223
2324const selected = ref (' ' )
25+ const filterKey = ref (' ' )
26+ const [filtered, toggleFiltered] = useToggle (true )
2427const tree = ref <CustomInspectorNode []>([])
2528const treeNodeLinkedList = computed (() => tree .value ?.length ? dfs (tree .value ?.[0 ]) : [])
2629const flattenedTreeNodes = computed (() => flattenTreeNodes (tree .value ))
@@ -92,8 +95,8 @@ watch(selected, () => {
9295 getRoutesState (selected .value )
9396})
9497
95- const getRoutesInspectorTree = ( ) => {
96- rpc .value .getInspectorTree ({ inspectorId: inspectorId .value , filter: ' ' }).then ((_data ) => {
98+ const getRoutesInspectorTree = async ( filter = ' ' ) => {
99+ await rpc .value .getInspectorTree ({ inspectorId: inspectorId .value , filter }).then ((_data ) => {
97100 const data = parse (_data ! )
98101 tree .value = data
99102 if (! selected .value && data .length ) {
@@ -145,6 +148,18 @@ onUnmounted(() => {
145148 rpc .functions .off (DevToolsMessagingEvents .INSPECTOR_TREE_UPDATED , onInspectorTreeUpdated )
146149 rpc .functions .off (DevToolsMessagingEvents .INSPECTOR_STATE_UPDATED , onInspectorStateUpdated )
147150})
151+
152+ function search(v : string ) {
153+ const value = v .trim ().toLowerCase ()
154+ toggleFiltered ()
155+ getRoutesInspectorTree (value ).then (() => {
156+ toggleFiltered ()
157+ })
158+ }
159+
160+ watchDebounced (filterKey , (v ) => {
161+ search (v )
162+ }, { debounce: 300 })
148163 </script >
149164
150165<template >
@@ -155,12 +170,22 @@ onUnmounted(() => {
155170 <Splitpanes class =" flex-1 overflow-auto" >
156171 <Pane border =" r base" size =" 40" h-full >
157172 <div h-full select-none overflow-scroll p2 class =" no-scrollbar" >
173+ <div class =" pb2" >
174+ <VueInput
175+ v-model =" filterKey" placeholder =" Search routes"
176+ :loading =" !filtered"
177+ :loading-debounce-time =" 250" class =" text-3.5"
178+ />
179+ </div >
158180 <ComponentTree v-model =" selected" :data =" tree" />
159181 </div >
160182 </Pane >
161183 <Pane size =" 60" >
162184 <div h-full overflow-scroll class =" no-scrollbar" >
163- <RootStateViewer v-if =" selected" class =" p3" :data =" state" node-id =" " inspector-id =" router" expanded-state-id =" routes-state" />
185+ <RootStateViewer
186+ v-if =" selected" class =" p3" :data =" state" node-id =" " inspector-id =" router"
187+ expanded-state-id =" routes-state"
188+ />
164189 <Empty v-else >
165190 No Data
166191 </Empty >
0 commit comments