import React, { MouseEvent, memo } from 'react'; import { NodesMarker } from './types'; import { GrafanaTheme } from '@grafana/data'; import { css } from 'emotion'; import { stylesFactory, useTheme } from '@grafana/ui'; const nodeR = 40; const getStyles = stylesFactory((theme: GrafanaTheme) => ({ mainGroup: css` cursor: pointer; font-size: 10px; `, mainCircle: css` fill: ${theme.colors.panelBg}; stroke: ${theme.colors.border3}; `, 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 = getStyles(useTheme()); 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
); });