From 097d6294cdfd0d11a2359693b366b1d16eaa5063 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Tue, 25 May 2021 00:55:07 +0200 Subject: [PATCH] fix(components): guess vue3 anonymous components name, fixes #1311 --- .../app-backend-vue3/src/components/util.ts | 18 ++++++++++++++---- packages/shell-dev-vue2/src/index.js | 13 ++++++++++++- packages/shell-dev-vue3/src/App.vue | 9 ++++++++- packages/shell-dev-vue3/src/main.js | 3 +++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/packages/app-backend-vue3/src/components/util.ts b/packages/app-backend-vue3/src/components/util.ts index 4d2d1766d..2a5c8a122 100644 --- a/packages/app-backend-vue3/src/components/util.ts +++ b/packages/app-backend-vue3/src/components/util.ts @@ -29,13 +29,23 @@ export function isFragment (instance) { export function getInstanceName (instance) { const name = getComponentTypeName(instance.type || {}) if (name) return name - return instance.root === instance - ? 'Root' - : 'Anonymous Component' + if (instance.root === instance) return 'Root' + for (const key in instance.parent?.type?.components) { + if (instance.parent.type.components[key] === instance.type) return saveComponentName(instance, key) + } + for (const key in instance.appContext?.components) { + if (instance.appContext.components[key] === instance.type) return saveComponentName(instance, key) + } + return 'Anonymous Component' +} + +function saveComponentName (instance, key) { + instance.type.__vdevtools_guessedName = key + return key } function getComponentTypeName (options) { - const name = options.name || options._componentTag + const name = options.name || options._componentTag || options.__vdevtools_guessedName if (name) { return name } diff --git a/packages/shell-dev-vue2/src/index.js b/packages/shell-dev-vue2/src/index.js index 327e58066..03b76045d 100644 --- a/packages/shell-dev-vue2/src/index.js +++ b/packages/shell-dev-vue2/src/index.js @@ -26,9 +26,18 @@ for (let i = 0; i < 100; i++) { const circular = {} circular.self = circular +Vue.component('global', { + render: h => h('h3', 'Global component') +}) + const app = new Vue({ store, router, + components: { + inline: { + render: h => h('h3', 'Inline component definition') + } + }, data: { obj: { items: items, @@ -47,7 +56,9 @@ const app = new Vue({ h(VuexObject), h(Init), h(RefTester), - h(Hidden) + h(Hidden), + h('global'), + h('inline') ]) } }) diff --git a/packages/shell-dev-vue3/src/App.vue b/packages/shell-dev-vue3/src/App.vue index 0b7a7f98c..50682aa9d 100644 --- a/packages/shell-dev-vue3/src/App.vue +++ b/packages/shell-dev-vue3/src/App.vue @@ -15,6 +15,8 @@ import SetupRender from './SetupRender.js' import Form from './Form.vue' import Heavy from './Heavy.vue' +import { h } from 'vue' + export default { name: 'MyApp', @@ -33,7 +35,10 @@ export default { Other, SetupRender, Form, - Heavy + Heavy, + inline: { + render: () => h('h3', 'Inline component definition') + } }, data () { @@ -77,6 +82,8 @@ export default {
+ +