mirror of
https://gitee.com/ByteDance/flowgram.ai.git
synced 2025-07-07 17:43:29 +08:00
fix(line): lines not re-rendering after hover (#181)
This commit is contained in:
parent
311180b2c8
commit
4a6e7a736f
@ -21,8 +21,8 @@ import { useVisible } from './use-visible';
|
||||
import { IconPlusCircle } from './button';
|
||||
|
||||
export const LineAddButton = (props: LineRenderProps) => {
|
||||
const { line, selected, color } = props;
|
||||
const visible = useVisible({ line, selected, color });
|
||||
const { line, selected, hovered, color } = props;
|
||||
const visible = useVisible({ line, selected, hovered });
|
||||
const nodePanelService = useService<WorkflowNodePanelService>(WorkflowNodePanelService);
|
||||
const document = useService(WorkflowDocument);
|
||||
const dragService = useService(WorkflowDragService);
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
import { LineColors, usePlayground, WorkflowLineEntity } from '@flowgram.ai/free-layout-editor';
|
||||
import { usePlayground, WorkflowLineEntity } from '@flowgram.ai/free-layout-editor';
|
||||
|
||||
import './index.less';
|
||||
|
||||
export const useVisible = (params: {
|
||||
line: WorkflowLineEntity;
|
||||
selected?: boolean;
|
||||
color?: string;
|
||||
hovered?: boolean;
|
||||
}): boolean => {
|
||||
const playground = usePlayground();
|
||||
const { line, selected = false, color } = params;
|
||||
const { line, selected = false, hovered } = params;
|
||||
if (line.disposed) {
|
||||
// 在 dispose 后,再去获取 line.to | line.from 会导致错误创建端口
|
||||
return false;
|
||||
@ -16,19 +16,7 @@ export const useVisible = (params: {
|
||||
if (playground.config.readonly) {
|
||||
return false;
|
||||
}
|
||||
if (!selected && color !== LineColors.HOVER) {
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
line.fromPort.portID === 'loop-output-to-function' &&
|
||||
line.toPort?.portID === 'loop-function-input'
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
line.fromPort.portID === 'batch-output-to-function' &&
|
||||
line.toPort?.portID === 'batch-function-input'
|
||||
) {
|
||||
if (!selected && !hovered) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
@ -118,17 +118,16 @@ export class WorkflowLinesLayer extends Layer<LinesLayerOptions> {
|
||||
}
|
||||
|
||||
private lineProps(line: WorkflowLineEntity): LineRenderProps {
|
||||
const renderData = line.getData(WorkflowLineRenderData);
|
||||
const { renderVersion } = renderData;
|
||||
const { lineType } = this.workflowDocument.linesManager;
|
||||
const selected = this.selectService.isSelected(line.id);
|
||||
const { version: lineVersion, color } = line;
|
||||
const hovered = this.hoverService.isHovered(line.id);
|
||||
const version = this.lineVersion(line);
|
||||
|
||||
const version = `${this._version}:${lineVersion}:${renderVersion}:${color}:${selected}`;
|
||||
return {
|
||||
key: line.id,
|
||||
color: line.color,
|
||||
selected,
|
||||
hovered,
|
||||
line,
|
||||
lineType,
|
||||
version,
|
||||
@ -136,6 +135,20 @@ export class WorkflowLinesLayer extends Layer<LinesLayerOptions> {
|
||||
};
|
||||
}
|
||||
|
||||
private lineVersion(line: WorkflowLineEntity): string {
|
||||
const renderData = line.getData(WorkflowLineRenderData);
|
||||
const { renderVersion } = renderData;
|
||||
const selected = this.selectService.isSelected(line.id);
|
||||
const hovered = this.hoverService.isHovered(line.id);
|
||||
const { version: lineVersion, color } = line;
|
||||
|
||||
const version = `v:${this._version},lv:${lineVersion},rv:${renderVersion},c:${color},s:${
|
||||
selected ? 'T' : 'F'
|
||||
},h:${hovered ? 'T' : 'F'}`;
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
private lineComponent(props: LineRenderProps): ReactNode {
|
||||
const RenderInsideLine = this.options.renderInsideLine ?? (() => <></>);
|
||||
return (
|
||||
|
||||
@ -10,6 +10,7 @@ export interface LineRenderProps {
|
||||
key: string;
|
||||
color?: string; // 高亮颜色,优先级最高
|
||||
selected?: boolean;
|
||||
hovered?: boolean;
|
||||
line: WorkflowLineEntity;
|
||||
lineType: LineRenderType;
|
||||
version: string; // 用于控制 memo 刷新
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user