mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Prometheus: Query builder operation docs popover improvements (#46006)
This commit is contained in:
parent
16b99cc0f5
commit
9bd6290968
@ -3,8 +3,7 @@ import { GrafanaTheme2, renderMarkdown } from '@grafana/data';
|
||||
import { FlexItem } from '@grafana/experimental';
|
||||
import { Button, Portal, useStyles2 } from '@grafana/ui';
|
||||
import React, { useState } from 'react';
|
||||
import { usePopper } from 'react-popper';
|
||||
import { useToggle } from 'react-use';
|
||||
import { usePopperTooltip } from 'react-popper-tooltip';
|
||||
import { QueryBuilderOperation, QueryBuilderOperationDef } from './types';
|
||||
|
||||
export interface Props {
|
||||
@ -14,41 +13,39 @@ export interface Props {
|
||||
|
||||
export const OperationInfoButton = React.memo<Props>(({ def, operation }) => {
|
||||
const styles = useStyles2(getStyles);
|
||||
const [popperTrigger, setPopperTrigger] = useState<HTMLButtonElement | null>(null);
|
||||
const [popover, setPopover] = useState<HTMLDivElement | null>(null);
|
||||
const [isOpen, toggleIsOpen] = useToggle(false);
|
||||
|
||||
const popper = usePopper(popperTrigger, popover, {
|
||||
const [show, setShow] = useState(false);
|
||||
const { getTooltipProps, setTooltipRef, setTriggerRef, visible } = usePopperTooltip({
|
||||
placement: 'top',
|
||||
modifiers: [
|
||||
{ name: 'arrow', enabled: true },
|
||||
{
|
||||
name: 'preventOverflow',
|
||||
enabled: true,
|
||||
options: {
|
||||
rootBoundary: 'viewport',
|
||||
},
|
||||
},
|
||||
],
|
||||
visible: show,
|
||||
offset: [0, 16],
|
||||
onVisibleChange: setShow,
|
||||
interactive: true,
|
||||
trigger: ['click'],
|
||||
});
|
||||
|
||||
return (
|
||||
<>
|
||||
<Button
|
||||
ref={setPopperTrigger}
|
||||
title="Click to show description"
|
||||
ref={setTriggerRef}
|
||||
icon="info-circle"
|
||||
size="sm"
|
||||
variant="secondary"
|
||||
fill="text"
|
||||
onClick={toggleIsOpen}
|
||||
/>
|
||||
{isOpen && (
|
||||
{visible && (
|
||||
<Portal>
|
||||
<div ref={setPopover} style={popper.styles.popper} {...popper.attributes.popper} className={styles.docBox}>
|
||||
<div ref={setTooltipRef} {...getTooltipProps()} className={styles.docBox}>
|
||||
<div className={styles.docBoxHeader}>
|
||||
<span>{def.renderer(operation, def, '<expr>')}</span>
|
||||
<FlexItem grow={1} />
|
||||
<Button icon="times" onClick={toggleIsOpen} fill="text" variant="secondary" title="Remove operation" />
|
||||
<Button
|
||||
icon="times"
|
||||
onClick={() => setShow(false)}
|
||||
fill="text"
|
||||
variant="secondary"
|
||||
title="Remove operation"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
className={styles.docBoxBody}
|
||||
@ -67,9 +64,9 @@ const getStyles = (theme: GrafanaTheme2) => {
|
||||
return {
|
||||
docBox: css({
|
||||
overflow: 'hidden',
|
||||
background: theme.colors.background.canvas,
|
||||
background: theme.colors.background.primary,
|
||||
border: `1px solid ${theme.colors.border.strong}`,
|
||||
boxShadow: theme.shadows.z2,
|
||||
boxShadow: theme.shadows.z3,
|
||||
maxWidth: '600px',
|
||||
padding: theme.spacing(1),
|
||||
borderRadius: theme.shape.borderRadius(),
|
||||
|
Loading…
Reference in New Issue
Block a user