12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import React, { useCallback, useState } from 'react';
- import { Modal } from '@grafana/ui';
- import { NetworkGraph, Props as NetWorkGraphProps } from './NetworkGraph';
- import { GraphEdge, GraphNode } from './utils';
- interface NetworkGraphModalApi {
- showModal: () => void;
- }
- interface OwnProps extends Pick<NetWorkGraphProps, 'direction'> {
- show: boolean;
- title: string;
- nodes: GraphNode[];
- edges: GraphEdge[];
- children: (api: NetworkGraphModalApi) => JSX.Element;
- }
- interface ConnectedProps {}
- interface DispatchProps {}
- type Props = OwnProps & ConnectedProps & DispatchProps;
- export function NetworkGraphModal({ edges, nodes, show: propsShow, title, children }: Props): JSX.Element {
- const [show, setShow] = useState(propsShow);
- const showModal = useCallback(() => setShow(true), [setShow]);
- const onClose = useCallback(() => setShow(false), [setShow]);
- return (
- <>
- <Modal
- isOpen={show}
- title={title}
- icon="info-circle"
- iconTooltip="The graph can be moved, zoomed in, and zoomed out."
- onClickBackdrop={onClose}
- onDismiss={onClose}
- >
- <NetworkGraph nodes={nodes} edges={edges} />
- </Modal>
- {children({ showModal })}
- </>
- );
- }
|