Skip to content

Commit 0c53e89

Browse files
authoredSep 13, 2024··
fix: missing plugin settings panel (#610)
1 parent 4910c3d commit 0c53e89

File tree

14 files changed

+27
-26
lines changed

14 files changed

+27
-26
lines changed
 

‎packages/applet/src/composables/custom-inspector-state.ts

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { InjectionKey, Ref } from 'vue'
44
type CustomInspectorState = Partial<{
55
homepage: string
66
id: string
7+
pluginId: string
78
label: string
89
logo: string
910
timelineLayerIds: string[]

‎packages/applet/src/composables/custom-inspector.ts

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export interface CustomInspectorType {
88
icon: string
99
packageName: string | undefined
1010
homepage: string | undefined
11+
pluginId: string
1112
}
1213

1314
export function useCustomInspector() {

‎packages/applet/src/modules/custom-inspector/components/Settings.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ function update(_settings) {
2424
<DevToolsHeader :doc-link="customInspectState.homepage!">
2525
<Navbar />
2626
</DevToolsHeader>
27-
<Settings :plugin-id="customInspectState.id!" :options="options" :values="values" @update="update" />
27+
<Settings :plugin-id="customInspectState.pluginId!" :options="options" :values="values" @update="update" />
2828
</div>
2929
</template>

‎packages/applet/src/modules/custom-inspector/index.vue

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ import Timeline from './components/timeline/Index.vue'
1212
1313
const props = defineProps<{
1414
id: string
15+
pluginId: string
1516
}>()
1617
1718
const emit = defineEmits(['loadError'])
1819
const inspectorState = createCustomInspectorStateContext()
1920
const loading = ref(false)
20-
2121
const pluginSettings = ref(null)
2222
provide('pluginSettings', pluginSettings)
2323
@@ -67,14 +67,14 @@ function getInspectorInfo() {
6767
label: payload?.label,
6868
logo: payload?.logo,
6969
timelineLayerIds: payload?.timelineLayers.map(item => item.id),
70+
pluginId: props.pluginId,
7071
}
7172
inspectorState.value = state
7273
restoreRouter()
7374
loading.value = false
7475
})
75-
rpc.value.getPluginSettings(props.id).then((settings) => {
76+
rpc.value.getPluginSettings(props.pluginId).then((settings) => {
7677
if (settings.options) {
77-
// @ts-expect-error skip type check
7878
pluginSettings.value = settings
7979
}
8080
else {

‎packages/applet/src/modules/pinia/components/Settings.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ function update(_settings) {
2323
<DevToolsHeader doc-link="https://pinia.vuejs.org/" github-repo-link="https://github.com/vuejs/pinia">
2424
<Navbar />
2525
</DevToolsHeader>
26-
<Settings :plugin-id="inspectorId" :options="options" :values="values" @update="update" />
26+
<Settings plugin-id="dev.esm.pinia" :options="options" :values="values" @update="update" />
2727
</div>
2828
</template>

‎packages/applet/src/modules/pinia/index.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ const { VirtualRouterView, restoreRouter } = registerVirtualRouter(routes, {
4444
})
4545
4646
onRpcConnected(() => {
47-
rpc.value.getPluginSettings('pinia').then((settings) => {
47+
const pluginDescriptorId = 'dev.esm.pinia'
48+
rpc.value.getPluginSettings(pluginDescriptorId).then((settings) => {
4849
if (settings.options) {
49-
// @ts-expect-error skip type check
5050
pluginSettings.value = settings
5151
}
5252
else {

‎packages/client/src/components/common/SplitScreen.vue

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const router = useRouter()
1414
const route = useRoute()
1515
const PageComponent = shallowRef()
1616
const customTabName = ref<string | null>(null)
17+
const customPluginId = ref<string | null>(null)
1718
const customTabType = ref<'custom-tab' | 'custom-inspector' | null>(null)
1819
1920
function isMatchedWithRoute(tab?: typeof flattenedTabs['value'][number]) {
@@ -58,6 +59,7 @@ watch(
5859
}
5960
if ((tab as ModuleBuiltinTab).path.startsWith(CUSTOM_INSPECTOR_TAB_VIEW)) {
6061
customTabName.value = tab.name
62+
customPluginId.value = tab.pluginId
6163
customTabType.value = 'custom-inspector'
6264
return
6365
}
@@ -108,7 +110,7 @@ const showGridPanel = ref(false)
108110
</div>
109111
<template v-if="customTabName && currentTab">
110112
<CustomTabComponent v-if="customTabType === 'custom-tab'" :tab="currentTab as CustomTab" class="h-[calc(100%-50px)]" iframe-inline of-auto />
111-
<CustomInspectorComponent v-else :id="customTabName" />
113+
<CustomInspectorComponent v-else-if="customPluginId" :id="customTabName" :plugin-id="customPluginId!" />
112114
</template>
113115
<div v-else-if="PageComponent && currentTab" of-auto class="h-[calc(100%-50px)]">
114116
<component :is="PageComponent" :key="`tab-${currentTab.name}`" />

‎packages/client/src/composables/custom-inspector-tabs.ts

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export function useCustomInspectorTabs() {
1616
title: inspector.label,
1717
path: `${CUSTOM_INSPECTOR_TAB_VIEW}/${inspector.id}`,
1818
category: 'modules',
19+
pluginId: inspector.pluginId,
1920
}
2021
})
2122
})

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import '@vue/devtools-applet/style.css'
55
const route = useRoute()
66
const router = useRouter()
77
const loadError = ref(false)
8-
8+
const customInspectorTabs = useCustomInspectorTabs()
9+
// @ts-expect-error skip type check
10+
const pluginId = computed(() => customInspectorTabs.value.find(tab => tab.name === route.params.name)?.pluginId)
911
function onLoadError() {
1012
loadError.value = true
1113
const timer = setTimeout(() => {
@@ -27,5 +29,5 @@ function onLoadError() {
2729
</p>
2830
</div>
2931
</div>
30-
<CustomInspectorPanel v-else :id="route.params.name" @load-error="onLoadError" />
32+
<CustomInspectorPanel v-else-if="!loadError && pluginId" :id="route.params.name as string" :plugin-id="pluginId" @load-error="onLoadError" />
3133
</template>

‎packages/devtools-kit/src/api/v6/index.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { getPluginSettings, initPluginSettings } from '../../core/plugin/plugin-settings'
22
import { DevToolsContextHookKeys, DevToolsV6PluginAPIHookKeys, DevToolsV6PluginAPIHooks } from '../../ctx/hook'
33
import { getActiveInspectors } from '../../ctx/inspector'
4+
45
import { devtoolsHooks } from '../../hook'
56
import { DevToolsHooks } from '../../types'
67
import type { DevtoolsContext } from '../../ctx'
@@ -110,9 +111,7 @@ export class DevToolsV6PluginAPI {
110111

111112
// settings
112113
getSettings(pluginId?: string) {
113-
const inspector = getActiveInspectors().find(i => i.packageName === this.plugin.descriptor.packageName)
114-
115-
return getPluginSettings((pluginId ?? inspector?.id)!, this.plugin.descriptor.settings)
114+
return getPluginSettings((pluginId ?? this.plugin.descriptor.id)!, this.plugin.descriptor.settings)
116115
}
117116

118117
// utilities

‎packages/devtools-kit/src/core/index.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { createDevToolsHook, hook, subscribeDevToolsHook } from '../hook'
1919
import { DevToolsHooks } from '../types'
2020
import { createAppRecord, removeAppRecordId } from './app'
2121
import { callDevToolsPluginSetupFn, createComponentsDevToolsPlugin, registerDevToolsPlugin, removeRegisteredPluginApp, setupDevToolsPlugin } from './plugin'
22+
import { initPluginSettings } from './plugin/plugin-settings'
2223
import { normalizeRouterInfo } from './router'
2324

2425
export function initDevTools() {
@@ -61,7 +62,9 @@ export function initDevTools() {
6162
hook.on.setupDevtoolsPlugin((pluginDescriptor, setupFn) => {
6263
addDevToolsPluginToBuffer(pluginDescriptor, setupFn)
6364
const { app } = activeAppRecord ?? {}
64-
65+
if (pluginDescriptor.settings) {
66+
initPluginSettings(pluginDescriptor.id, pluginDescriptor.settings)
67+
}
6568
if (!app)
6669
return
6770

‎packages/devtools-kit/src/core/plugin/index.ts

+1-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { target } from '@vue/devtools-shared'
22
import { DevToolsPluginAPI } from '../../api'
3-
import { initPluginSettings } from '../../core/plugin/plugin-settings'
4-
import { devtoolsContext, devtoolsInspector, devtoolsPluginBuffer } from '../../ctx'
3+
import { devtoolsContext, devtoolsPluginBuffer } from '../../ctx'
54
import { hook } from '../../hook'
65
import { App, PluginDescriptor, PluginSetupFunction } from '../../types'
76

@@ -34,13 +33,6 @@ export function callDevToolsPluginSetupFn(plugin: [PluginDescriptor, PluginSetup
3433
}
3534

3635
setupFn(api)
37-
if (pluginDescriptor.settings) {
38-
const inspector = devtoolsInspector.find(inspector => inspector.descriptor.id === pluginDescriptor.id)
39-
if (inspector) {
40-
inspector.descriptor.settings = pluginDescriptor.settings
41-
initPluginSettings(inspector.options.id, pluginDescriptor.settings)
42-
}
43-
}
4436
}
4537

4638
export function removeRegisteredPluginApp(app: App) {

‎packages/devtools-kit/src/core/plugin/plugin-settings.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { devtoolsContext, DevToolsV6PluginAPIHookKeys, getInspector } from '../../ctx'
1+
import { devtoolsContext, DevToolsV6PluginAPIHookKeys } from '../../ctx'
22
import { devtoolsPluginBuffer } from '../../ctx/plugin'
33
import { PluginDescriptor } from '../../types'
44

@@ -16,8 +16,7 @@ function getPluginLocalKey(pluginId: string) {
1616
}
1717

1818
export function getPluginSettingsOptions(pluginId: string) {
19-
const descriptor = getInspector(pluginId)?.descriptor
20-
const item = devtoolsPluginBuffer.find(item => item[0].id === descriptor?.id)?.[0] ?? null
19+
const item = devtoolsPluginBuffer.find(item => item[0].id === pluginId && !!(item[0]?.settings))?.[0] ?? null
2120
return item?.settings ?? null
2221
}
2322

‎packages/devtools-kit/src/ctx/inspector.ts

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export function getActiveInspectors() {
5353
icon: `custom-ic-baseline-${options?.icon?.replace(/_/g, '-')}`,
5454
packageName: descriptor.packageName,
5555
homepage: descriptor.homepage,
56+
pluginId: descriptor.id,
5657
}
5758
})
5859
}

0 commit comments

Comments
 (0)
Please sign in to comment.