index.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { useCallback } from 'react';
  2. import { FlowNodeEntity, useNodeRender } from '@flowgram.ai/free-layout-editor';
  3. import { ConfigProvider } from '@douyinfe/semi-ui';
  4. import { NodeStatusBar } from '../testrun/node-status-bar';
  5. import { NodeRenderContext } from '../../context';
  6. import { ErrorIcon } from './styles';
  7. import { NodeWrapper } from './node-wrapper';
  8. export const BaseNode = ({ node }: { node: FlowNodeEntity }) => {
  9. /**
  10. * Provides methods related to node rendering
  11. * 提供节点渲染相关的方法
  12. */
  13. const nodeRender = useNodeRender();
  14. /**
  15. * It can only be used when nodeEngine is enabled
  16. * 只有在节点引擎开启时候才能使用表单
  17. */
  18. const form = nodeRender.form;
  19. /**
  20. * Used to make the Tooltip scale with the node, which can be implemented by itself depending on the UI library
  21. * 用于让 Tooltip 跟随节点缩放, 这个可以根据不同的 ui 库自己实现
  22. */
  23. const getPopupContainer = useCallback(() => node.renderData.node || document.body, []);
  24. return (
  25. <ConfigProvider getPopupContainer={getPopupContainer}>
  26. <NodeRenderContext.Provider value={nodeRender}>
  27. <NodeWrapper>
  28. {form?.state.invalid && <ErrorIcon />}
  29. {form?.render()}
  30. </NodeWrapper>
  31. <NodeStatusBar />
  32. </NodeRenderContext.Provider>
  33. </ConfigProvider>
  34. );
  35. };