Skip to content
This repository was archived by the owner on May 24, 2024. It is now read-only.

Commit 844749f

Browse files
authored
[carbon-graphs] Add multiple value region support for line graphs (#359)
1 parent d2bdcf8 commit 844749f

File tree

26 files changed

+1026
-53
lines changed

26 files changed

+1026
-53
lines changed

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/carbon-graphs/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## Unreleased
44

5+
* Added
6+
* Added support for multiple value regions for line graph.
7+
58
## 2.25.0 - (April 5, 2024)
69

710
* Added

packages/carbon-graphs/src/js/controls/Line/helpers/helpers.js

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -391,37 +391,54 @@ const getValueRegionSubset = (dataTarget, getXDataValues) => {
391391
color: undefined,
392392
values: [],
393393
};
394-
let previousColor;
395-
dataTarget.values.forEach((value) => {
396-
if (
397-
!utils.isEmpty(value.region)
398-
&& !utils.isEmpty(value.region.start)
399-
&& !utils.isEmpty(value.region.end)
400-
) {
401-
// If the color is different, then move it to new region set
402-
if (previousColor !== value.region.color) {
403-
if (valueRegion.values.length > 0) {
394+
let continuousRegions = [];
395+
396+
const isValidValueRegion = (region) => (!utils.isEmpty(region) && !utils.isEmpty(region.start) && !utils.isEmpty(region.end));
397+
398+
dataTarget.values.forEach((value, index) => {
399+
if (!utils.isEmpty(value.regions)) {
400+
const previousValueRegions = index > 0 ? dataTarget.values[index - 1].regions : null;
401+
const previousColors = previousValueRegions ? previousValueRegions.map(r => isValidValueRegion(r) && r.color) : [];
402+
403+
value.regions.forEach((region) => {
404+
if (isValidValueRegion(region)) {
405+
// If the color is not present in the previous value regions, then move it to new region set
406+
if (!previousColors.includes(region.color)) {
407+
if (valueRegion.values.length > 0) {
408+
valueRegionSubset.push(valueRegion);
409+
}
410+
411+
valueRegion = {
412+
color: region.color,
413+
values: [],
414+
};
415+
416+
// Remove colors that are no longer being used
417+
continuousRegions = continuousRegions.filter((r) => r.color !== region.color);
418+
continuousRegions.push(valueRegion);
419+
}
420+
421+
const adjacentValueRegions = continuousRegions.find(r => r.color === region.color);
422+
adjacentValueRegions.values.push({
423+
x: getXDataValues(value.x),
424+
start: region.start,
425+
end: region.end,
426+
});
427+
} else {
404428
valueRegionSubset.push(valueRegion);
429+
valueRegion = {
430+
color: undefined,
431+
values: [],
432+
};
405433
}
406-
valueRegion = {
407-
color: value.region.color,
408-
values: [],
409-
};
410-
}
411-
previousColor = value.region.color;
412-
valueRegion.color = value.region.color;
413-
valueRegion.values.push({
414-
x: getXDataValues(value.x),
415-
start: value.region.start,
416-
end: value.region.end,
417434
});
418435
} else {
419436
valueRegionSubset.push(valueRegion);
420-
previousColor = undefined;
421437
valueRegion = {
422438
color: undefined,
423439
values: [],
424440
};
441+
continuousRegions = [];
425442
}
426443
});
427444
valueRegionSubset.push(valueRegion);

packages/carbon-graphs/tests/wdio/Graphs/LineGraph/line-graph-spec.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,22 @@ Terra.describeViewports('LineGraph ', ['tiny', 'medium', 'large'], () => {
104104
browser.url('/raw/tests/cerner-terra-graphs-docs/graphs/line-graph/regions/line/value-region');
105105
Terra.validates.screenshot('value_region', { selector: '.carbon-graph-container' });
106106
});
107+
108+
it('validates multiple value regions graph container', () => {
109+
browser.url('/raw/tests/cerner-terra-graphs-docs/graphs/line-graph/regions/line/multiple-value-regions');
110+
Terra.validates.screenshot('multiple_value_regions', { selector: '.carbon-graph-container' });
111+
});
112+
113+
it('validates multiple value regions with spanning region graph container', () => {
114+
browser.url('/raw/tests/cerner-terra-graphs-docs/graphs/line-graph/regions/line/multiple-value-regions-spanning');
115+
Terra.validates.screenshot('multiple_value_regions_spanning', { selector: '.carbon-graph-container' });
116+
});
117+
118+
it('validates multiple value regions with overlapping region graph container', () => {
119+
browser.url('/raw/tests/cerner-terra-graphs-docs/graphs/line-graph/regions/line/multiple-value-regions-overlapping');
120+
Terra.validates.screenshot('multiple_value_regions_overlapping', { selector: '.carbon-graph-container' });
121+
});
122+
107123
describe('Y2-Axis', () => {
108124
beforeEach(() => browser.url('/raw/tests/cerner-terra-graphs-docs/graphs/line-graph/regions/line/y-2-axis'));
109125

@@ -130,6 +146,14 @@ Terra.describeViewports('LineGraph ', ['tiny', 'medium', 'large'], () => {
130146
Terra.validates.screenshot('multiple_line_region', { selector: '.carbon-graph-container' });
131147
});
132148

149+
it('validates multiple value regions graph container', () => {
150+
browser.url('/raw/tests/cerner-terra-graphs-docs/graphs/line-graph/regions/multi-line/multiple-value-regions');
151+
152+
const element = $('.carbon-legend').$$('li');
153+
element[3].moveTo();
154+
Terra.validates.screenshot('multiline_multiple_value_regions', { selector: '.carbon-graph-container' });
155+
});
156+
133157
describe('when hovered on multiple line region legends', () => {
134158
let element = null;
135159
beforeEach(() => {

packages/terra-graphs-docs/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## Unreleased
44

5+
* Added
6+
* Added tests for multiple value regions.
7+
58
## 1.10.0 - (April 19, 2024)
69

710
* Added
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import Carbon from '@cerner/carbon-graphs';
2+
import { loadPopup } from '@cerner/terra-graphs-docs/lib/example-datasets/popup';
3+
4+
// Dataset to be used in a multiline graph with value regions
5+
const data = {
6+
key: 'uid_4',
7+
label: {
8+
display: 'Data Label 4',
9+
},
10+
color: Carbon.helpers.COLORS.PURPLE,
11+
shape: Carbon.helpers.SHAPES.DARK.SQUARE,
12+
onClick: loadPopup,
13+
legendOptions: {
14+
showLine: true,
15+
showShape: true,
16+
},
17+
values: [{
18+
x: 85,
19+
y: -5,
20+
regions: [{
21+
start: -10,
22+
end: 0,
23+
color: Carbon.helpers.COLORS.LAVENDER,
24+
}, {
25+
start: 0,
26+
end: 10,
27+
color: Carbon.helpers.COLORS.GREY,
28+
}],
29+
}, {
30+
x: 115,
31+
y: -10,
32+
regions: [{
33+
start: -15,
34+
end: -5,
35+
color: Carbon.helpers.COLORS.LAVENDER,
36+
}, {
37+
start: 5,
38+
end: 15,
39+
color: Carbon.helpers.COLORS.GREY,
40+
}],
41+
}, {
42+
x: 155,
43+
y: -15,
44+
regions: [{
45+
start: -20,
46+
end: -10,
47+
color: Carbon.helpers.COLORS.LAVENDER,
48+
}, {
49+
start: 10,
50+
end: 20,
51+
color: Carbon.helpers.COLORS.GREY,
52+
}],
53+
}, {
54+
x: 175,
55+
y: -20,
56+
regions: [{
57+
start: -25,
58+
end: -15,
59+
color: Carbon.helpers.COLORS.LAVENDER,
60+
}, {
61+
start: 15,
62+
end: 25,
63+
color: Carbon.helpers.COLORS.GREY,
64+
}],
65+
}, {
66+
x: 225,
67+
y: -15,
68+
regions: [{
69+
start: -20,
70+
end: -10,
71+
color: Carbon.helpers.COLORS.LAVENDER,
72+
}, {
73+
start: 10,
74+
end: 20,
75+
color: Carbon.helpers.COLORS.GREY,
76+
}],
77+
}, {
78+
x: 255,
79+
y: -10,
80+
regions: [{
81+
start: -15,
82+
end: -5,
83+
color: Carbon.helpers.COLORS.LAVENDER,
84+
}, {
85+
start: 5,
86+
end: 15,
87+
color: Carbon.helpers.COLORS.GREY,
88+
}],
89+
}, {
90+
x: 275,
91+
y: -5,
92+
regions: [{
93+
start: -10,
94+
end: -0,
95+
color: Carbon.helpers.COLORS.LAVENDER,
96+
}, {
97+
start: 0,
98+
end: 10,
99+
color: Carbon.helpers.COLORS.GREY,
100+
}],
101+
}],
102+
};
103+
104+
export default data;

packages/terra-graphs-docs/src/example-datasets/dataObjects/Line/datasetRegions7.js

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,47 +14,47 @@ const data = {
1414
x: new Date(2016, 0, 1, 1, 5).toISOString(),
1515
y: 5,
1616
isCritical: false,
17-
region: {
17+
regions: [{
1818
start: 3,
1919
end: 8,
2020
color: Carbon.helpers.COLORS.GREY,
21-
},
21+
}],
2222
},
2323
{
2424
x: new Date(2016, 0, 1, 2, 15).toISOString(),
2525
y: 11,
26-
region: {
26+
regions: [{
2727
start: 4,
2828
end: 14,
2929
color: Carbon.helpers.COLORS.GREY,
30-
},
30+
}],
3131
},
3232
{
3333
x: new Date(2016, 0, 1, 3, 15).toISOString(),
3434
y: 12,
35-
region: {
35+
regions: [{
3636
start: 5,
3737
end: 15,
3838
color: Carbon.helpers.COLORS.GREY,
39-
},
39+
}],
4040
},
4141
{
4242
x: new Date(2016, 0, 1, 4, 15).toISOString(),
4343
y: 16,
44-
region: {
44+
regions: [{
4545
start: 10,
4646
end: 20,
4747
color: Carbon.helpers.COLORS.GREY,
48-
},
48+
}],
4949
},
5050
{
5151
x: new Date(2016, 0, 1, 5, 15).toISOString(),
5252
y: 17,
53-
region: {
53+
regions: [{
5454
start: 10,
5555
end: 20,
5656
color: Carbon.helpers.COLORS.GREY,
57-
},
57+
}],
5858
},
5959
{
6060
x: new Date(2016, 0, 1, 6, 15).toISOString(),
@@ -63,68 +63,68 @@ const data = {
6363
{
6464
x: new Date(2016, 0, 1, 7, 0).toISOString(),
6565
y: 11,
66-
region: {
66+
regions: [{
6767
start: 8,
6868
end: 15,
69-
},
69+
}],
7070
},
7171
{
7272
x: new Date(2016, 0, 1, 8, 15).toISOString(),
7373
y: 12,
74-
region: {
74+
regions: [{
7575
start: 8,
7676
end: 15,
77-
},
77+
}],
7878
},
7979
{
8080
x: new Date(2016, 0, 1, 9, 45).toISOString(),
8181
y: 16,
82-
region: {
82+
regions: [{
8383
start: 10,
8484
end: 20,
85-
},
85+
}],
8686
},
8787
{
8888
x: new Date(2016, 0, 1, 12, 15).toISOString(),
8989
y: 17,
90-
region: {
90+
regions: [{
9191
start: 10,
9292
end: 20,
93-
},
93+
}],
9494
},
9595
{
9696
x: new Date(2016, 0, 1, 13, 15).toISOString(),
9797
y: 28,
98-
region: {
98+
regions: [{
9999
start: 10,
100100
end: 20,
101-
},
101+
}],
102102
isCritical: true,
103103
},
104104
{
105105
x: new Date(2016, 0, 1, 14, 15).toISOString(),
106106
y: 12,
107-
region: {
107+
regions: [{
108108
start: 8,
109109
end: 15,
110-
},
110+
}],
111111
},
112112
{
113113
x: new Date(2016, 0, 1, 19, 45).toISOString(),
114114
y: 13,
115-
region: {
115+
regions: [{
116116
start: 9,
117117
end: 16,
118-
},
118+
}],
119119
},
120120
{
121121
x: new Date(2016, 0, 1, 21, 15).toISOString(),
122122
y: 14,
123-
region: {
123+
regions: [{
124124
start: 9,
125125
end: 16,
126126
color: Carbon.helpers.COLORS.GREY,
127-
},
127+
}],
128128
},
129129
],
130130
};

0 commit comments

Comments
 (0)