From 8c71296cc48acc7e059a86a074a79f46a1f5d1ab Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 3 Nov 2023 10:56:37 +0100 Subject: [PATCH] visualizer: add legend Signed-off-by: Patrik Oldsberg --- .../AppVisualizerPage/GraphVisualizer.tsx | 58 ++++++++++++++++--- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/plugins/visualizer/src/components/AppVisualizerPage/GraphVisualizer.tsx b/plugins/visualizer/src/components/AppVisualizerPage/GraphVisualizer.tsx index f4945a0534..327c2d226b 100644 --- a/plugins/visualizer/src/components/AppVisualizerPage/GraphVisualizer.tsx +++ b/plugins/visualizer/src/components/AppVisualizerPage/GraphVisualizer.tsx @@ -23,6 +23,7 @@ import { useRouteRef, } from '@backstage/frontend-plugin-api'; import Box from '@material-ui/core/Box'; +import Paper from '@material-ui/core/Paper'; import Tooltip from '@material-ui/core/Tooltip'; import Typography from '@material-ui/core/Typography'; import * as colors from '@material-ui/core/colors'; @@ -177,10 +178,10 @@ function getFullPath(node?: AppNode): string { function OutputLink(props: { dataRef: ExtensionDataRef; - node: AppNode; + node?: AppNode; className: string; }) { - const routeRef = props.node.instance?.getData(coreExtensionData.routeRef); + const routeRef = props.node?.instance?.getData(coreExtensionData.routeRef); let link: string | undefined = undefined; try { @@ -198,10 +199,10 @@ function OutputLink(props: { ); } -function Output(props: { dataRef: ExtensionDataRef; node: AppNode }) { +function Output(props: { dataRef: ExtensionDataRef; node?: AppNode }) { const { dataRef, node } = props; const { id } = dataRef; - const instance = node.instance!; + const instance = node?.instance; const classes = useOutputStyles({ color: getOutputColor(id) }); @@ -209,7 +210,7 @@ function Output(props: { dataRef: ExtensionDataRef; node: AppNode }) { return ( {getFullPath(node)}}> - {String(instance.getData(dataRef))} + {String(instance?.getData(dataRef) ?? '')} ); @@ -313,10 +314,51 @@ function Extension(props: { node: AppNode }) { ); } -export function GraphVisualizer({ tree }: { tree: AppTree }) { +const legendMap = { + 'React Element': coreExtensionData.reactElement, + 'Utility API': coreExtensionData.apiFactory, + 'Route Path': coreExtensionData.routePath, + 'Route Ref': coreExtensionData.routeRef, + 'Nav Target': coreExtensionData.navTarget, + Theme: coreExtensionData.theme, +}; + +function Legend() { return ( - - + + {Object.entries(legendMap).map(([label, dataRef]) => ( + + + {label} + + ))} + + ); +} + +export function GraphVisualizer({ tree }: { tree: AppTree }) { + return ( + + + + + + + + ); }