This is an automated email from the ASF dual-hosted git repository. wu-sheng pushed a commit to branch feat/service-internal-topology in repository https://gitbox.apache.org/repos/asf/skywalking-horizon-ui.git
commit 90bd351a7a80243e0fa20dbfd5c50d58b52eb4dd Author: Wu Sheng <[email protected]> AuthorDate: Tue Jun 9 14:47:18 2026 +0800 feat(admin): sync banner counts configured vs not-configured-yet layers The layer-list view now lists layers OAP reports that have no dashboard template yet, so 'all N templates match bundled' was misleading. Drop the 'all' in the shared synced message and, on the layer page, append the not-configured-yet layer count (e.g. '… 42 templates match bundled defaults. 3 layers not configured yet.'). --- apps/ui/src/features/admin/_shared/useTemplateSync.ts | 2 +- .../admin/layer-templates/LayerDashboardsAdmin.vue | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/apps/ui/src/features/admin/_shared/useTemplateSync.ts b/apps/ui/src/features/admin/_shared/useTemplateSync.ts index 3b21bc7..0efff87 100644 --- a/apps/ui/src/features/admin/_shared/useTemplateSync.ts +++ b/apps/ui/src/features/admin/_shared/useTemplateSync.ts @@ -177,7 +177,7 @@ export function useTemplateSync(opts: UseTemplateSyncOptions): UseTemplateSyncRe } return { severity: 'clean', - message: `Synced from OAP — all ${ownBadges.value.length} templates match bundled.${localSuffix.value}`, + message: `Synced from OAP — ${ownBadges.value.length} templates match bundled defaults.${localSuffix.value}`, detail: GLOSSARY, counts, localCount: localCount.value, diff --git a/apps/ui/src/features/admin/layer-templates/LayerDashboardsAdmin.vue b/apps/ui/src/features/admin/layer-templates/LayerDashboardsAdmin.vue index f9e5525..d415cc3 100644 --- a/apps/ui/src/features/admin/layer-templates/LayerDashboardsAdmin.vue +++ b/apps/ui/src/features/admin/layer-templates/LayerDashboardsAdmin.vue @@ -131,6 +131,20 @@ const templates = computed<AdminLayerTemplate[]>(() => { .sort((a, b) => a.key.localeCompare(b.key)); return [...rawTemplates.value, ...synthesized]; }); +// Layers the roster reports that carry no dashboard template yet (the +// synthesized blanks above). Surfaced in the sync banner so the operator +// reads the picker's total as "configured + not-configured-yet". +const unconfiguredCount = computed(() => Math.max(0, templates.value.length - rawTemplates.value.length)); +// The shared sync banner counts only TEMPLATED layers (synced / diverged / +// local). On this layer-list view we append the not-yet-configured count so +// the summary explains the full picker. Other admin pages keep the plain +// banner (they aren't layer-list oriented). +const layerSyncBanner = computed(() => { + const b = sync.banner.value; + const n = unconfiguredCount.value; + if (n === 0) return b; + return { ...b, message: `${b.message} ${n} layer${n === 1 ? '' : 's'} not configured yet.` }; +}); const isLoading = ref(true); const error = ref<string | null>(null); const selectedKey = ref<string>(''); @@ -1831,7 +1845,7 @@ const namingTest = computed<NamingTestResult>(() => { </div> </header> - <SyncStatusBanner :banner="sync.banner.value" /> + <SyncStatusBanner :banner="layerSyncBanner" /> <div v-if="error" class="banner err">{{ error }}</div> <div v-if="isLoading" class="empty">Loading templates…</div>
