UNPKG

@grafana/ui

Version:
1 lines 6.77 kB
{"version":3,"file":"VizLegendListItem.cjs","sources":["../../../../src/components/VizLegend/VizLegendListItem.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { useCallback } from 'react';\nimport * as React from 'react';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { VizLegendSeriesIcon } from './VizLegendSeriesIcon';\nimport { VizLegendStatsList } from './VizLegendStatsList';\nimport { type VizLegendItem } from './types';\n\nexport interface Props<T> {\n item: VizLegendItem<T>;\n className?: string;\n onLabelClick?: (item: VizLegendItem<T>, event: React.MouseEvent<HTMLButtonElement>) => void;\n onLabelMouseOver?: (\n item: VizLegendItem,\n event: React.MouseEvent<HTMLButtonElement> | React.FocusEvent<HTMLButtonElement>\n ) => void;\n onLabelMouseOut?: (\n item: VizLegendItem,\n event: React.MouseEvent<HTMLButtonElement> | React.FocusEvent<HTMLButtonElement>\n ) => void;\n readonly?: boolean;\n allItemsSelected: boolean;\n}\n\n/**\n * @internal\n */\nexport const VizLegendListItem = <T = unknown,>({\n item,\n onLabelClick,\n onLabelMouseOver,\n onLabelMouseOut,\n className,\n readonly,\n allItemsSelected,\n}: Props<T>) => {\n const styles = useStyles2(getStyles);\n\n const onMouseOver = useCallback(\n (event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>) => {\n if (onLabelMouseOver) {\n onLabelMouseOver(item, event);\n }\n },\n [item, onLabelMouseOver]\n );\n\n const onMouseOut = useCallback(\n (event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>) => {\n if (onLabelMouseOut) {\n onLabelMouseOut(item, event);\n }\n },\n [item, onLabelMouseOut]\n );\n\n const onClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n if (onLabelClick) {\n onLabelClick(item, event);\n }\n },\n [item, onLabelClick]\n );\n\n const getAriaLabel = () => {\n if (allItemsSelected) {\n return t('grafana-ui.viz-legend.all-series-selected', 'All series selected');\n }\n return t('grafana-ui.viz-legend.only-this-series-selected', 'Only {{label}} selected', { label: item.label });\n };\n\n return (\n <div\n className={cx(styles.itemWrapper, item.disabled && styles.itemDisabled, className)}\n data-testid={selectors.components.VizLegend.seriesName(item.label)}\n >\n <VizLegendSeriesIcon\n seriesName={item.fieldName ?? item.label}\n color={item.color}\n gradient={item.gradient}\n readonly={readonly}\n lineStyle={item.lineStyle}\n />\n <button\n disabled={readonly}\n type=\"button\"\n aria-label={getAriaLabel()}\n onBlur={onMouseOut}\n onFocus={onMouseOver}\n onMouseOver={onMouseOver}\n onMouseOut={onMouseOut}\n onClick={onClick}\n className={styles.label}\n >\n {item.label}\n </button>\n\n {item.getDisplayValues && <VizLegendStatsList stats={item.getDisplayValues()} />}\n </div>\n );\n};\n\nVizLegendListItem.displayName = 'VizLegendListItem';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n label: css({\n label: 'LegendLabel',\n whiteSpace: 'nowrap',\n background: 'none',\n border: 'none',\n fontSize: 'inherit',\n padding: 0,\n userSelect: 'text',\n }),\n itemDisabled: css({\n label: 'LegendLabelDisabled',\n color: theme.colors.text.disabled,\n }),\n itemWrapper: css({\n label: 'LegendItemWrapper',\n display: 'flex',\n whiteSpace: 'nowrap',\n alignItems: 'center',\n gap: theme.spacing(1),\n flexGrow: 1,\n }),\n value: css({\n textAlign: 'right',\n }),\n yAxisLabel: css({\n color: theme.v1.palette.gray2,\n }),\n});\n"],"names":["useStyles2","useCallback","t","jsxs","cx","selectors","jsx","VizLegendSeriesIcon","VizLegendStatsList","css"],"mappings":"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"}