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), }; }
