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>

Reply via email to