Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5160ecb

Browse files
committed
Adds ability to order legend items by custom legendIndex property.
1 parent 98747b0 commit 5160ecb

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/components/legend/get_legend_data.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
var Registry = require('../../registry');
1313
var helpers = require('./helpers');
14+
var sortLegendData = require('./sort_legend_data');
1415

1516

1617
module.exports = function getLegendData(calcdata, opts) {
@@ -82,7 +83,8 @@ module.exports = function getLegendData(calcdata, opts) {
8283
legendData = new Array(lgroupsLength);
8384

8485
for(i = 0; i < lgroupsLength; i++) {
85-
ltraces = lgroupToTraces[lgroups[i]];
86+
// Sort legend data by legendIndex
87+
ltraces = sortLegendData(ltraces);
8688
legendData[i] = helpers.isReversed(opts) ? ltraces.reverse() : ltraces;
8789
}
8890
}
@@ -94,10 +96,13 @@ module.exports = function getLegendData(calcdata, opts) {
9496
ltraces = lgroupToTraces[lgroups[i]][0];
9597
legendData[0][helpers.isReversed(opts) ? lgroupsLength - i - 1 : i] = ltraces;
9698
}
99+
// Sort legend data by legendIndex
100+
legendData[0] = sortLegendData(legendData[0], helpers.isReversed(opts));
97101
lgroupsLength = 1;
98102
}
99103

100104
// needed in repositionLegend
101105
opts._lgroupsLength = lgroupsLength;
106+
102107
return legendData;
103108
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
'use strict';
2+
3+
/**
4+
* This function sorts legend data by legendIndex custom data property.
5+
*/
6+
module.exports = function sortLegendData(legendTraces, reverse) {
7+
var sortedTraces = legendTraces.sort(comparelegendIndex)
8+
if (reverse) {
9+
sortedTraces = sortedTraces.reverse()
10+
}
11+
return sortedTraces;
12+
}
13+
14+
function comparelegendIndex(a, b) {
15+
var indexGetter = val => val[0].hasOwnProperty('data') && val[0].data.hasOwnProperty('legendIndex') ? val[0].data.legendIndex : -1;
16+
var aIndex = indexGetter(a);
17+
var bIndex = indexGetter(b);
18+
if (aIndex < bIndex) {
19+
return -1;
20+
}
21+
if (aIndex > bIndex) {
22+
return 1;
23+
}
24+
return 0;
25+
}

0 commit comments

Comments
 (0)