Skip to content

Commit 7b41e0b

Browse files
feat: Perform saving on client side
1 parent 8d82035 commit 7b41e0b

File tree

6 files changed

+52
-3
lines changed

6 files changed

+52
-3
lines changed

packages/applet/src/utils/search.ts

+8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { INFINITY, NAN, NEGATIVE_INFINITY, UNDEFINED, isPlainObject } from '@vue/devtools-kit'
2+
import type { CustomInspectorNode } from '@vue/devtools-kit'
23

34
/**
45
* Searches a key or value in the object, with a maximum deepness
@@ -132,3 +133,10 @@ function internalSearchArray(array, searchTerm, seen, depth) {
132133
}
133134
return match
134135
}
136+
137+
/**
138+
* Recursively search for target tree Id in nodes and there children
139+
*/
140+
export function getValidNodeId(treeNode: CustomInspectorNode[], targetId?: string) {
141+
return treeNode.some(({ id: treeNodeId, children }) => (children && getValidNodeId(children, targetId)) || treeNodeId === targetId) && (targetId as string)
142+
}

packages/client/src/composables/select.ts

+18
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,21 @@ export function useSelectWithContext(groupId: string, id: string, onSelect?: (id
4444
toggleSelected,
4545
}
4646
}
47+
48+
export function useDefaultSelect() {
49+
const router = useRouter()
50+
const route = useRoute()
51+
52+
function saveSelectedId(id: string) {
53+
router.push({
54+
params: {
55+
id,
56+
},
57+
})
58+
}
59+
60+
return {
61+
saveSelectedId,
62+
savedSelectedId: route.params.id as string,
63+
}
64+
}

packages/client/src/pages/components.vue

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Components as ComponentsPanel } from '@vue/devtools-applet'
33
import '@vue/devtools-applet/style.css'
44
import { rpc } from '@vue/devtools-core'
55
import { openInEditor } from '../composables/open-in-editor'
6+
import { useDefaultSelect } from '../composables/select'
67
78
function onInspectComponentStart() {
89
rpc.value.emit('toggle-panel', false)
@@ -11,12 +12,16 @@ function onInspectComponentStart() {
1112
function onInspectComponentEnd() {
1213
rpc.value.emit('toggle-panel', true)
1314
}
15+
16+
const { saveSelectedId, savedSelectedId } = useDefaultSelect()
1417
</script>
1518

1619
<template>
1720
<ComponentsPanel
21+
:saved-selected-id="savedSelectedId"
1822
@open-in-editor="openInEditor"
1923
@on-inspect-component-start="onInspectComponentStart"
2024
@on-inspect-component-end="onInspectComponentEnd"
25+
@on-select-id="saveSelectedId"
2126
/>
2227
</template>

packages/client/src/pages/custom-inspector-tab-view.vue

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script setup lang="ts">
22
import { CustomInspector as CustomInspectorPanel } from '@vue/devtools-applet'
3+
import { useDefaultSelect } from '../composables/select'
34
import '@vue/devtools-applet/style.css'
45
56
const route = useRoute()
@@ -13,6 +14,8 @@ function onLoadError() {
1314
router.replace('/overview')
1415
}, 2000)
1516
}
17+
18+
const { saveSelectedId, savedSelectedId } = useDefaultSelect()
1619
</script>
1720

1821
<template>
@@ -27,5 +30,8 @@ function onLoadError() {
2730
</p>
2831
</div>
2932
</div>
30-
<CustomInspectorPanel v-else :id="route.params.name" @load-error="onLoadError" />
33+
<CustomInspectorPanel
34+
v-else :id="(route.params.name as string)" :saved-selected-id="savedSelectedId" @load-error="onLoadError"
35+
@on-select-id="saveSelectedId"
36+
/>
3137
</template>

packages/client/src/pages/pinia.vue

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
<script setup lang="ts">
22
import { Pinia as PiniaPanel } from '@vue/devtools-applet'
3+
import { useDefaultSelect } from '../composables/select'
34
import '@vue/devtools-applet/style.css'
5+
6+
const { saveSelectedId, savedSelectedId } = useDefaultSelect()
47
</script>
58

69
<template>
7-
<PiniaPanel />
10+
<PiniaPanel
11+
:saved-selected-id="savedSelectedId"
12+
@on-select-id="saveSelectedId"
13+
/>
814
</template>

packages/client/src/pages/router.vue

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
<script setup lang="ts">
22
import { Router as RouterPanel, useCustomInspector } from '@vue/devtools-applet'
3+
import { useDefaultSelect } from '../composables/select'
34
import '@vue/devtools-applet/style.css'
45
56
const { registeredInspector } = useCustomInspector()
7+
const { saveSelectedId, savedSelectedId } = useDefaultSelect()
8+
69
// @ts-expect-error skip type check
710
const vueRouterInspector = computed(() => registeredInspector.value?.find(item => item.packageName === 'vue-router'))
811
// @ts-expect-error skip type check
912
const inspectorId = computed(() => vueRouterInspector.value?.id)
1013
</script>
1114

1215
<template>
13-
<RouterPanel :id="inspectorId" />
16+
<RouterPanel
17+
:id="inspectorId" :saved-selected-id="savedSelectedId"
18+
@on-select-id="saveSelectedId"
19+
/>
1420
</template>

0 commit comments

Comments
 (0)