import { css } from '@emotion/css'; import React, { MouseEvent, memo } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { useStyles2 } from '@grafana/ui'; import { NodesMarker } from './types'; const nodeR = 40; const getStyles = (theme: GrafanaTheme2) => ({ mainGroup: css` cursor: pointer; font-size: 10px; `, mainCircle: css` fill: ${theme.components.panel.background}; stroke: ${theme.colors.border.strong}; `, text: css` width: 50px; height: 50px; text-align: center; display: flex; align-items: center; justify-content: center; `, }); export const Marker = memo(function Marker(props: { marker: NodesMarker; onClick?: (event: MouseEvent, marker: NodesMarker) => void; }) { const { marker, onClick } = props; const { node } = marker; const styles = useStyles2(getStyles); if (!(node.x !== undefined && node.y !== undefined)) { return null; } return ( { onClick?.(event, marker); }} aria-label={`Hidden nodes marker: ${node.id}`} >
{/* we limit the count to 101 so if we have more than 100 nodes we don't have exact count */} {marker.count > 100 ? '>100' : marker.count} nodes
); });