Skip to content

Commit d52a529

Browse files
fix(applet): stabilize search results when updating component tree (#539)
1 parent cedbccd commit d52a529

File tree

3 files changed

+41
-10
lines changed

3 files changed

+41
-10
lines changed

packages/applet/src/modules/components/index.vue

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ const { expanded: expandedTreeNodes } = createExpandedContext()
129129
const { expanded: expandedStateNodes } = createExpandedContext('component-state')
130130
createSelectedContext()
131131
132-
function getComponentsInspectorTree(filter = '') {
132+
async function getComponentsInspectorTree(filter = '') {
133133
return rpc.value.getInspectorTree({ inspectorId, filter }).then((data) => {
134134
const res = parse(data)
135135
tree.value = res
@@ -184,14 +184,32 @@ rpc.functions.on(DevToolsMessagingEvents.INSPECTOR_STATE_UPDATED, onInspectorSta
184184
185185
getComponentsInspectorTree()
186186
187+
function searchComponentTree(v: string) {
188+
const value = v.trim().toLowerCase()
189+
toggleFiltered()
190+
getComponentsInspectorTree(value).then(() => {
191+
toggleFiltered()
192+
})
193+
}
194+
195+
watchDebounced(filterComponentName, (v) => {
196+
searchComponentTree(v)
197+
}, { debounce: 300 })
198+
187199
function onInspectorTreeUpdated(_data: string) {
188200
const data = parse(_data) as {
189201
inspectorId: string
190202
rootNodes: CustomInspectorNode[]
191203
}
192204
if (data.inspectorId !== inspectorId)
193205
return
194-
tree.value = data.rootNodes
206+
207+
if (filterComponentName.value) {
208+
searchComponentTree(filterComponentName.value)
209+
}
210+
else {
211+
tree.value = data.rootNodes
212+
}
195213
196214
if (!flattenedTreeNodesIds.value.includes(activeComponentId.value)) {
197215
activeComponentId.value = tree.value?.[0]?.id
@@ -206,14 +224,6 @@ onUnmounted(() => {
206224
rpc.functions.off(DevToolsMessagingEvents.INSPECTOR_TREE_UPDATED, onInspectorTreeUpdated)
207225
})
208226
209-
watchDebounced(filterComponentName, (v) => {
210-
const value = v.trim().toLowerCase()
211-
toggleFiltered()
212-
getComponentsInspectorTree(value).then(() => {
213-
toggleFiltered()
214-
})
215-
}, { debounce: 300 })
216-
217227
function inspectComponentInspector() {
218228
inspectComponentTipVisible.value = true
219229
emit('onInspectComponentStart')

packages/playground/basic/src/main.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ const routes: RouteRecordRaw[] = [
5454
component: () => import('./pages/CircularState.vue'),
5555
name: 'circular-state',
5656
},
57+
{
58+
path: '/interval-update',
59+
component: () => import('./pages/IntervalUpdate.vue'),
60+
name: 'interval-update',
61+
},
5762
]
5863

5964
const router = createRouter({
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<script setup lang="ts">
2+
import Foo from '../components/Foo.vue'
3+
4+
const str = ref<'hello' | 'world'>('hello')
5+
6+
useIntervalFn(() => {
7+
str.value = str.value === 'hello' ? 'world' : 'hello'
8+
}, 1000)
9+
</script>
10+
11+
<template>
12+
<div>
13+
This is {{ str }} time!
14+
<Foo />
15+
</div>
16+
</template>

0 commit comments

Comments
 (0)