mirror of
https://gitee.com/ByteDance/flowgram.ai.git
synced 2025-07-07 17:43:29 +08:00
47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import { useCallback } from 'react';
|
|
|
|
import { FlowNodeEntity, useNodeRender } from '@flowgram.ai/free-layout-editor';
|
|
import { ConfigProvider } from '@douyinfe/semi-ui';
|
|
|
|
import { NodeRenderContext } from '../../context';
|
|
import { BaseNodeStyle, ErrorIcon } from './styles';
|
|
import { NodeWrapper } from './node-wrapper';
|
|
|
|
export const BaseNode = ({ node }: { node: FlowNodeEntity }) => {
|
|
/**
|
|
* Provides methods related to node rendering
|
|
* 提供节点渲染相关的方法
|
|
*/
|
|
const nodeRender = useNodeRender();
|
|
/**
|
|
* It can only be used when nodeEngine is enabled
|
|
* 只有在节点引擎开启时候才能使用表单
|
|
*/
|
|
const form = nodeRender.form;
|
|
|
|
/**
|
|
* Used to make the Tooltip scale with the node, which can be implemented by itself depending on the UI library
|
|
* 用于让 Tooltip 跟随节点缩放, 这个可以根据不同的 ui 库自己实现
|
|
*/
|
|
const getPopupContainer = useCallback(() => node.renderData.node || document.body, []);
|
|
|
|
return (
|
|
<ConfigProvider getPopupContainer={getPopupContainer}>
|
|
<NodeRenderContext.Provider value={nodeRender}>
|
|
<NodeWrapper>
|
|
{form?.state.invalid && <ErrorIcon />}
|
|
<BaseNodeStyle
|
|
className={nodeRender.selected ? 'selected' : ''}
|
|
style={{
|
|
borderRadius: 8,
|
|
outline: form?.state.invalid ? '1px solid red' : 'none',
|
|
}}
|
|
>
|
|
{form?.render()}
|
|
</BaseNodeStyle>
|
|
</NodeWrapper>
|
|
</NodeRenderContext.Provider>
|
|
</ConfigProvider>
|
|
);
|
|
};
|