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 586d95ef6699bd85fac38bead32b0b166dcb3579
Author: Wu Sheng <[email protected]>
AuthorDate: Tue Jun 9 16:49:01 2026 +0800

    fix(preview): derive serviceInternalTopology cap in the layer preview 
overlay
    
    componentsToCaps (the client-side preview/draft cap mapping in
    layerFromTemplate) now sets caps.serviceInternalTopology from the component
    flag + the presence of a serviceInternalTopology block — so saving a draft
    (or Preview-from-bundled) surfaces the Internal Topology tab in 
?mode=preview
    without pushing to OAP. Mirrors the BFF menu's deriveLayer.
---
 apps/ui/src/shell/layerFromTemplate.ts | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/apps/ui/src/shell/layerFromTemplate.ts 
b/apps/ui/src/shell/layerFromTemplate.ts
index ca11273..ff590e2 100644
--- a/apps/ui/src/shell/layerFromTemplate.ts
+++ b/apps/ui/src/shell/layerFromTemplate.ts
@@ -42,6 +42,9 @@ export interface LayerTemplateContent {
   /** Only the `instanceTopology` presence is read here, to gate the
    *  Instance-map drill-down cap — same rule the menu's `deriveLayer` uses. */
   topology?: { instanceTopology?: unknown };
+  /** Presence gates the Service-Internal-Topology cap (with its component
+   *  flag), so a draft enabling it opens the Internal Topology tab in 
preview. */
+  serviceInternalTopology?: unknown;
 }
 
 /** `components.*` → `caps.*` (the tab-visibility flags the sidebar reads).
@@ -52,6 +55,7 @@ export interface LayerTemplateContent {
 export function componentsToCaps(
   components: Record<string, boolean | undefined> | undefined,
   topology?: { instanceTopology?: unknown },
+  serviceInternalTopology?: unknown,
 ): LayerCaps {
   const c = components ?? {};
   const serviceMap = !!c.topology;
@@ -61,6 +65,7 @@ export function componentsToCaps(
     endpoints: !!c.endpoints,
     serviceMap,
     instanceTopology: serviceMap && !!topology?.instanceTopology,
+    serviceInternalTopology: !!c.serviceInternalTopology && 
!!serviceInternalTopology,
     endpointDependency: !!c.endpointDependency,
     traces: !!c.traces,
     logs: !!c.logs,
@@ -86,7 +91,7 @@ export function layerContentToDef(t: LayerTemplateContent): 
LayerDef {
     normal: null,
     documentLink: t.documentLink,
     slots: t.slots ?? {},
-    caps: componentsToCaps(t.components, t.topology),
+    caps: componentsToCaps(t.components, t.topology, 
t.serviceInternalTopology),
     header: t.metrics,
     metrics: t.metrics,
     overview: t.overview,
@@ -102,6 +107,6 @@ export function overlayLayerDef(base: LayerDef, t: 
LayerTemplateContent): LayerD
   return {
     ...base,
     slots: { ...base.slots, ...(t.slots ?? {}) },
-    caps: componentsToCaps(t.components, t.topology),
+    caps: componentsToCaps(t.components, t.topology, 
t.serviceInternalTopology),
   };
 }

Reply via email to