Skip to content

Commit e1e9a74

Browse files
committed
simplify and fixup legend sort
1 parent 69c0b29 commit e1e9a74

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

src/components/legend/get_legend_data.js

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ module.exports = function getLegendData(calcdata, opts) {
2020
// TODO: check this against fullData legendgroups?
2121
var uniqueGroup = '~~i' + lgroupi;
2222
lgroups.push(uniqueGroup);
23-
lgroupToTraces[uniqueGroup] = [[legendItem]];
23+
lgroupToTraces[uniqueGroup] = [legendItem];
2424
lgroupi++;
2525
} else if(lgroups.indexOf(legendGroup) === -1) {
2626
lgroups.push(legendGroup);
2727
hasOneNonBlankGroup = true;
28-
lgroupToTraces[legendGroup] = [[legendItem]];
28+
lgroupToTraces[legendGroup] = [legendItem];
2929
} else {
30-
lgroupToTraces[legendGroup].push([legendItem]);
30+
lgroupToTraces[legendGroup].push(legendItem);
3131
}
3232
}
3333

@@ -68,36 +68,46 @@ module.exports = function getLegendData(calcdata, opts) {
6868
// won't draw a legend in this case
6969
if(!lgroups.length) return [];
7070

71+
// collapse all groups into one if all groups are blank
72+
var shouldCollapse = !hasOneNonBlankGroup || !helpers.isGrouped(opts);
73+
7174
// rearrange lgroupToTraces into a d3-friendly array of arrays
7275
var legendData;
7376

74-
var shouldCollapse = !hasOneNonBlankGroup || !helpers.isGrouped(opts);
75-
legendData = shouldCollapse ? [[]] : [];
77+
legendData = [];
7678
for(i = 0; i < lgroups.length; i++) {
7779
var t = lgroupToTraces[lgroups[i]];
7880
if(shouldCollapse) {
79-
// collapse all groups into one if all groups are blank
80-
legendData[0].push(t[0]);
81+
legendData.push(t[0]);
8182
} else {
8283
legendData.push(t);
8384
}
8485
}
86+
if(shouldCollapse) legendData = [legendData];
8587

8688
// sort considering trace.legendrank and legend.traceorder
87-
var dir = helpers.isReversed(opts) ? -1 : 1;
8889
var orderFn = function(a, b) {
89-
var A = a[0].trace;
90-
var B = b[0].trace;
90+
var A = a.trace;
91+
var B = b.trace;
9192
var delta = A.legendrank - B.legendrank;
92-
if(!delta) delta = A.index - B.index;
93-
if(!delta) delta = a[0]._initID - b[0]._initID;
93+
if(!delta) delta = A._initID - B._initID;
9494

95-
return dir * delta;
95+
return delta;
9696
};
97-
97+
var rev = helpers.isReversed(opts);
9898
for(i = 0; i < legendData.length; i++) {
9999
legendData[i].sort(orderFn);
100+
if(rev) legendData[i].reverse();
101+
}
102+
103+
var arr = [];
104+
for(i = 0; i < legendData.length; i++) {
105+
arr[i] = [];
106+
for(j = 0; j < legendData[i].length; j++) {
107+
arr[i][j] = [legendData[i][j]];
108+
}
100109
}
110+
legendData = arr;
101111

102112
// number of legend groups - needed in legend/draw.js
103113
opts._lgroupsLength = legendData.length;

0 commit comments

Comments
 (0)