mirror of
https://github.com/n8n-io/n8n.git
synced 2025-02-02 07:01:30 -08:00
fix(editor): Show connector label above the line when it's straight (#12622)
This commit is contained in:
parent
558570f431
commit
c97bd48a77
|
@ -1,10 +1,10 @@
|
||||||
import CanvasEdge, { type CanvasEdgeProps } from './CanvasEdge.vue';
|
|
||||||
import { createComponentRenderer } from '@/__tests__/render';
|
import { createComponentRenderer } from '@/__tests__/render';
|
||||||
import { createTestingPinia } from '@pinia/testing';
|
import { createTestingPinia } from '@pinia/testing';
|
||||||
import { setActivePinia } from 'pinia';
|
import userEvent from '@testing-library/user-event';
|
||||||
import { Position } from '@vue-flow/core';
|
import { Position } from '@vue-flow/core';
|
||||||
import { NodeConnectionType } from 'n8n-workflow';
|
import { NodeConnectionType } from 'n8n-workflow';
|
||||||
import userEvent from '@testing-library/user-event';
|
import { setActivePinia } from 'pinia';
|
||||||
|
import CanvasEdge, { type CanvasEdgeProps } from './CanvasEdge.vue';
|
||||||
|
|
||||||
const DEFAULT_PROPS = {
|
const DEFAULT_PROPS = {
|
||||||
sourceX: 0,
|
sourceX: 0,
|
||||||
|
@ -151,4 +151,38 @@ describe('CanvasEdge', () => {
|
||||||
|
|
||||||
expect(edge).toHaveAttribute('d', 'M0,0 C62.5,0 -162.5,-100 -100,-100');
|
expect(edge).toHaveAttribute('d', 'M0,0 C62.5,0 -162.5,-100 -100,-100');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render a label above the connector when it is straight', () => {
|
||||||
|
const { container } = renderComponent({
|
||||||
|
props: {
|
||||||
|
...DEFAULT_PROPS,
|
||||||
|
sourceY: 50,
|
||||||
|
targetY: 50,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const label = container.querySelector('.vue-flow__edge-label');
|
||||||
|
|
||||||
|
expect(label).toHaveAttribute(
|
||||||
|
'style',
|
||||||
|
'transform: translate(-50%, -150%) translate(50px, 50px);',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should render a label in the middle of the connector when it isn't straight", () => {
|
||||||
|
const { container } = renderComponent({
|
||||||
|
props: {
|
||||||
|
...DEFAULT_PROPS,
|
||||||
|
sourceY: 0,
|
||||||
|
targetY: 100,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const label = container.querySelector('.vue-flow__edge-label');
|
||||||
|
|
||||||
|
expect(label).toHaveAttribute(
|
||||||
|
'style',
|
||||||
|
'transform: translate(-50%, -50%) translate(50px, 50px);',
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,7 +5,7 @@ import { isValidNodeConnectionType } from '@/utils/typeGuards';
|
||||||
import type { Connection, EdgeProps } from '@vue-flow/core';
|
import type { Connection, EdgeProps } from '@vue-flow/core';
|
||||||
import { BaseEdge, EdgeLabelRenderer } from '@vue-flow/core';
|
import { BaseEdge, EdgeLabelRenderer } from '@vue-flow/core';
|
||||||
import { NodeConnectionType } from 'n8n-workflow';
|
import { NodeConnectionType } from 'n8n-workflow';
|
||||||
import { computed, useCssModule, toRef } from 'vue';
|
import { computed, toRef, useCssModule } from 'vue';
|
||||||
import CanvasEdgeToolbar from './CanvasEdgeToolbar.vue';
|
import CanvasEdgeToolbar from './CanvasEdgeToolbar.vue';
|
||||||
import { getEdgeRenderData } from './utils';
|
import { getEdgeRenderData } from './utils';
|
||||||
|
|
||||||
|
@ -70,9 +70,13 @@ const edgeLabelStyle = computed(() => ({
|
||||||
color: edgeColor.value,
|
color: edgeColor.value,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
const isConnectorStraight = computed(() => renderData.value.isConnectorStraight);
|
||||||
|
|
||||||
const edgeToolbarStyle = computed(() => {
|
const edgeToolbarStyle = computed(() => {
|
||||||
|
const translateY = isConnectorStraight.value ? '-150%' : '-50%';
|
||||||
|
|
||||||
return {
|
return {
|
||||||
transform: `translate(-50%, -50%) translate(${labelPosition.value[0]}px,${labelPosition.value[1]}px)`,
|
transform: `translate(-50%, ${translateY}) translate(${labelPosition.value[0]}px, ${labelPosition.value[1]}px)`,
|
||||||
...(props.hovered ? { zIndex: 1 } : {}),
|
...(props.hovered ? { zIndex: 1 } : {}),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -21,12 +21,14 @@ export function getEdgeRenderData(
|
||||||
} = {},
|
} = {},
|
||||||
) {
|
) {
|
||||||
const { targetX, targetY, sourceX, sourceY, sourcePosition, targetPosition } = props;
|
const { targetX, targetY, sourceX, sourceY, sourcePosition, targetPosition } = props;
|
||||||
|
const isConnectorStraight = sourceY === targetY;
|
||||||
|
|
||||||
if (!isRightOfSourceHandle(sourceX, targetX) || connectionType !== NodeConnectionType.Main) {
|
if (!isRightOfSourceHandle(sourceX, targetX) || connectionType !== NodeConnectionType.Main) {
|
||||||
const segment = getBezierPath(props);
|
const segment = getBezierPath(props);
|
||||||
return {
|
return {
|
||||||
segments: [segment],
|
segments: [segment],
|
||||||
labelPosition: [segment[1], segment[2]],
|
labelPosition: [segment[1], segment[2]],
|
||||||
|
isConnectorStraight,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,5 +61,6 @@ export function getEdgeRenderData(
|
||||||
return {
|
return {
|
||||||
segments: [firstSegment, secondSegment],
|
segments: [firstSegment, secondSegment],
|
||||||
labelPosition: [firstSegmentTargetX, firstSegmentTargetY],
|
labelPosition: [firstSegmentTargetX, firstSegmentTargetY],
|
||||||
|
isConnectorStraight,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,9 +132,9 @@ function onClickAdd() {
|
||||||
|
|
||||||
.runDataLabel {
|
.runDataLabel {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 50%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -150%);
|
||||||
font-size: var(--font-size-xs);
|
font-size: var(--font-size-xs);
|
||||||
color: var(--color-success);
|
color: var(--color-success);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue