You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

popover.tsx 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { useFetchFlow } from '@/hooks/flow-hooks';
  2. import { Popover } from 'antd';
  3. import get from 'lodash/get';
  4. import React, { useMemo } from 'react';
  5. import JsonView from 'react18-json-view';
  6. import 'react18-json-view/src/style.css';
  7. import { Operator } from '../../constant';
  8. import { useReplaceIdWithText } from '../../hooks';
  9. import styles from './index.less';
  10. interface IProps extends React.PropsWithChildren {
  11. nodeId: string;
  12. }
  13. const NodePopover = ({ children, nodeId }: IProps) => {
  14. const { data } = useFetchFlow();
  15. const component = useMemo(() => {
  16. return get(data, ['dsl', 'components', nodeId], {});
  17. }, [nodeId, data]);
  18. const output = get(component, ['obj', 'params', 'output'], {});
  19. const componentName = get(component, ['obj', 'component_name'], '');
  20. const replacedOutput = useReplaceIdWithText(output);
  21. const content =
  22. componentName !== Operator.Answer ? (
  23. <div
  24. onClick={(e) => {
  25. e.preventDefault();
  26. e.stopPropagation();
  27. }}
  28. >
  29. <JsonView
  30. src={replacedOutput}
  31. displaySize={30}
  32. className={styles.jsonView}
  33. />
  34. </div>
  35. ) : undefined;
  36. return (
  37. <Popover content={content} placement="right" destroyTooltipOnHide>
  38. {children}
  39. </Popover>
  40. );
  41. };
  42. export default NodePopover;