Skip to content
This repository was archived by the owner on Nov 29, 2022. It is now read-only.

Commit f87e2bd

Browse files
tillprochaskaRosencrantz
authored andcommitted
Do not truncate text when vertex is selected
1 parent eb1fbb4 commit f87e2bd

File tree

3 files changed

+87
-5
lines changed

3 files changed

+87
-5
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import React from 'react';
2+
import { shallow, mount } from 'enzyme';
3+
import { VertexLabelRenderer } from './VertexLabelRenderer';
4+
import { Point } from '../layout/Point';
5+
6+
describe('<VertexLabelRenderer />', () => {
7+
it('renders text labels', () => {
8+
const component = shallow(
9+
<VertexLabelRenderer
10+
type="text"
11+
label="Lorem ipsum dolor sit amet."
12+
center={new Point(0, 0)}
13+
/>
14+
);
15+
16+
const label = component.find('text').first().text();
17+
expect(label).toEqual('Lorem ipsum dolor sit amet.');
18+
});
19+
20+
it('truncates long labels', () => {
21+
const component = shallow(
22+
<VertexLabelRenderer
23+
type="text"
24+
label="Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa."
25+
center={new Point(0, 0)}
26+
/>
27+
);
28+
29+
const label = component.find('text').first().text();
30+
expect(label).toEqual('Lorem ipsum dolor sit amet, co…');
31+
});
32+
33+
it('display untruncated label when selected', () => {
34+
const component = mount(
35+
<svg>
36+
<VertexLabelRenderer
37+
type="text"
38+
label="Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa."
39+
center={new Point(0, 0)}
40+
selected={true}
41+
/>
42+
</svg>
43+
);
44+
45+
const lines = component.find('tspan').map(tspan => tspan.text());
46+
const verticalLineDelta = component.find('tspan').map(tspan => tspan.prop('dy'));
47+
48+
expect(lines).toEqual([
49+
'Lorem ipsum dolor sit amet,',
50+
'consectetuer adipiscing elit.',
51+
'Aenean commodo ligula eget',
52+
'dolor. Aenean massa.',
53+
]);
54+
55+
expect(verticalLineDelta).toEqual([0, 5.5, 5.5, 5.5]);
56+
});
57+
});

src/components/NetworkDiagram/renderer/VertexLabelRenderer.tsx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
import * as React from 'react'
22
import truncateText from 'truncate';
3+
import { wrapLines } from '../utils';
34

45
import { Date, Numeric, URL } from 'types';
56
import { Point } from 'NetworkDiagram/layout/Point'
67

78
const labelTruncate = 30;
9+
const fontSize = 5;
810

911
interface IVertexLabelRendererProps {
12+
type: string,
1013
label: string,
1114
center: Point,
1215
onClick?: (e: any) => void,
1316
color?: string
14-
type: string
17+
selected?: boolean,
1518
}
1619

1720
export class VertexLabelRenderer extends React.PureComponent<IVertexLabelRendererProps> {
1821
formatLabel() {
19-
const { label, type } = this.props;
22+
const { label, type, selected } = this.props;
2023

2124
if (type === 'url') {
2225
return <URL value={label} onClick={(e: React.MouseEvent) => e.stopPropagation()} truncate={labelTruncate} />;
@@ -28,13 +31,25 @@ export class VertexLabelRenderer extends React.PureComponent<IVertexLabelRendere
2831
return <Numeric num={Number(label)} />;
2932
}
3033

34+
if (selected) {
35+
return (
36+
<>
37+
{wrapLines(label, labelTruncate).map((line, index) => (
38+
<tspan key={index} x="0" dy={index === 0 ? 0 : fontSize * 1.1}>
39+
{line}
40+
</tspan>)
41+
)}
42+
</>
43+
);
44+
}
45+
3146
return truncateText(label, labelTruncate);
3247
}
3348

3449
render() {
3550
const { center, onClick, color } = this.props;
3651
const style = {
37-
fontSize: "5px",
52+
fontSize: `${fontSize}px`,
3853
fontFamily: "sans-serif",
3954
fontWeight: "bold",
4055
userSelect: "none"

src/components/NetworkDiagram/renderer/VertexRenderer.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,18 @@ export class VertexRenderer extends React.PureComponent<IVertexRendererProps, IV
190190
stroke={isEntity ? 'none' : vertexColor}
191191
onMouseOver={this.onMouseOver} onMouseOut={this.onMouseOut}
192192
/>
193-
<VertexLabelRenderer center={labelPosition} label={vertex.label} type={vertex.type} onClick={this.onClick} color={vertexColor} />
194-
<IconRenderer entity={entityManager.getEntity(vertex.entityId)} radius={vertexRadius} />
193+
<VertexLabelRenderer
194+
center={labelPosition}
195+
label={vertex.label}
196+
type={vertex.type}
197+
selected={selected}
198+
onClick={this.onClick}
199+
color={vertexColor}
200+
/>
201+
<IconRenderer
202+
entity={entityManager.getEntity(vertex.entityId)}
203+
radius={vertexRadius}
204+
/>
195205
</g>
196206
</DraggableCore>
197207
);

0 commit comments

Comments
 (0)