import { css } from '@emotion/css'; import React, { MouseEvent, useCallback, useEffect, useState } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; import { Button, InlineFieldRow, InlineLabel, useStyles2 } from '@grafana/ui'; import { VariableOption, VariableWithOptions } from '../types'; export interface VariableValuesPreviewProps { variable: VariableWithOptions; } export const VariableValuesPreview: React.FunctionComponent = ({ variable: { options }, }) => { const [previewLimit, setPreviewLimit] = useState(20); const [previewOptions, setPreviewOptions] = useState([]); const showMoreOptions = useCallback( (event: MouseEvent) => { event.preventDefault(); setPreviewLimit(previewLimit + 20); }, [previewLimit, setPreviewLimit] ); const styles = useStyles2(getStyles); useEffect(() => setPreviewOptions(options.slice(0, previewLimit)), [previewLimit, options]); if (!previewOptions.length) { return null; } return (
Preview of values
{previewOptions.map((o, index) => (
{o.text}
))}
{options.length > previewLimit && ( )}
); }; VariableValuesPreview.displayName = 'VariableValuesPreview'; function getStyles(theme: GrafanaTheme2) { return { wrapper: css({ display: 'flex', flexDirection: 'column', marginTop: theme.spacing(2), }), optionContainer: css({ marginLeft: theme.spacing(0.5), marginBottom: theme.spacing(0.5), }), label: css({ whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis', maxWidth: '50vw', }), }; }