Skip to content

Commit

Permalink
fix(issue-3012): 修复条形图图例转置 & 单测 (#3013)
Browse files Browse the repository at this point in the history
* fix(issue-3012): 修复条形图图例转置 & 单测

* fix(bar): 修复条形图单测问题
  • Loading branch information
visiky authored Dec 9, 2021
1 parent 5d65033 commit be7caa9
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 44 deletions.
146 changes: 146 additions & 0 deletions __tests__/bugs/issue-3012-spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
import { Bar } from '../../src';
import { createDiv } from '../utils/dom';
import { delay } from '../utils/delay';

describe('#3012', () => {
it('basic bar', async () => {
const data = [
{ year: '1951 年', value: 38 },
{ year: '1952 年', value: 52 },
{ year: '1956 年', value: 61 },
{ year: '1957 年', value: 145 },
{ year: '1958 年', value: 48 },
];

const bar = new Bar(createDiv(), {
data,
xField: 'value',
yField: 'year',
seriesField: 'year',
legend: {
position: 'top-left',
},
});

bar.render();
const legendItems = bar.chart.getController('legend').getComponents()[0].component.get('items');
expect(legendItems.length).toBe(data.length);
expect(legendItems[0].name).toBe(data[0].year);

const tooltipController = bar.chart.getController('tooltip');
const box = bar.chart.geometries[0].elements[0].shape.getBBox();
const point = { x: box.x + box.width / 2, y: box.y + box.height / 2 };

await delay(80);
bar.chart.showTooltip(point);
await delay(100);

const items = tooltipController.getTooltipItems(point);
expect(items[0].name).toBe(data[0].year);

bar.destroy();
});

it('group bar & stack bar', async () => {
const data = [
{
label: 'Mon.',
type: 'series1',
value: 2800,
},
{
label: 'Mon.',
type: 'series2',
value: 2260,
},
{
label: 'Tues.',
type: 'series1',
value: 1800,
},
{
label: 'Tues.',
type: 'series2',
value: 1300,
},
{
label: 'Wed.',
type: 'series1',
value: 950,
},
{
label: 'Wed.',
type: 'series2',
value: 900,
},
{
label: 'Thur.',
type: 'series1',
value: 500,
},
{
label: 'Thur.',
type: 'series2',
value: 390,
},
{
label: 'Fri.',
type: 'series1',
value: 170,
},
{
label: 'Fri.',
type: 'series2',
value: 100,
},
];

const bar = new Bar(createDiv(), {
data,
isGroup: true,
xField: 'value',
yField: 'label',
seriesField: 'type',
legend: {
position: 'top-left',
},
});

bar.render();
let legendItems = bar.chart.getController('legend').getComponents()[0].component.get('items');
expect(legendItems.length).toBe(2);
expect(legendItems[0].name).toBe('series1');
expect(legendItems[1].name).toBe('series2');

const tooltipController = bar.chart.getController('tooltip');
let box = bar.chart.geometries[0].elements[0].shape.getBBox();
let point = { x: box.x + box.width / 2, y: box.y + box.height / 2 };

await delay(80);
bar.chart.showTooltip(point);
await delay(100);

let items = tooltipController.getTooltipItems(point);
expect(items[0].name).toBe('series1');
expect(items[1].name).toBe('series2');

bar.update({ isGroup: false, isStack: true });
legendItems = bar.chart.getController('legend').getComponents()[0].component.get('items');
expect(legendItems.length).toBe(2);
expect(legendItems[0].name).toBe('series1');
expect(legendItems[1].name).toBe('series2');

box = bar.chart.geometries[0].elements[0].shape.getBBox();
point = { x: box.x + box.width / 2, y: box.y + box.height / 2 };

await delay(80);
bar.chart.showTooltip(point);
await delay(100);

items = tooltipController.getTooltipItems(point);
expect(items[0].name).toBe('series1');
expect(items[1].name).toBe('series2');

bar.destroy();
});
});
18 changes: 0 additions & 18 deletions __tests__/unit/plots/bar/index-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -382,24 +382,6 @@ describe('bar', () => {
return bar;
}

it('legend/tooltip reversed, grouped', () => {
const bar = getBar(true, false);
// @ts-ignore
expect(bar.chart.getOptions().legends['series'].reversed).toBe(true);
// @ts-ignore
expect(bar.chart.getOptions().tooltip.reversed).toBe(true);
bar.destroy();
});

it('legend/tooltip reversed, stacked', () => {
const bar = getBar(false, true);
// @ts-ignore
expect(bar.chart.getOptions().legends['series'].reversed).toBe(false);
// @ts-ignore
expect(bar.chart.getOptions().tooltip?.reversed).toBe(false);
bar.destroy();
});

it('bar background', () => {
const bar = getBar(false, false);
expect(bar.options.barBackground).not.toBeDefined();
Expand Down
3 changes: 1 addition & 2 deletions __tests__/unit/plots/bar/legend-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ describe('bar legend', () => {

bar.render();
// @ts-ignore
expect(bar.chart.getOptions().legends.series).toEqual({ position: 'right-top', reversed: true });
expect(bar.chart.getOptions().legends.series).toEqual({ position: 'right-top' });
expect(bar.chart.getComponents().filter((co) => co.type === 'legend').length).toBe(1);

bar.update({
Expand All @@ -46,7 +46,6 @@ describe('bar legend', () => {
expect(bar.chart.getOptions().legends.series).toEqual({
position: 'right-top',
flipPage: true,
reversed: true,
});
expect(bar.chart.getComponents().filter((co) => co.type === 'legend').length).toBe(1);

Expand Down
25 changes: 1 addition & 24 deletions src/plots/bar/adaptor.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Params } from '../../core/adaptor';
import { tooltip } from '../../adaptor/common';
import { deepAssign, flow } from '../../utils';
import { adaptor as columnAdaptor } from '../column/adaptor';
export { meta } from '../column/adaptor';
Expand Down Expand Up @@ -83,7 +84,6 @@ function legend(params: Params<BarOptions>): Params<BarOptions> {
if (legend !== false) {
legend = {
position: isStack ? 'top-left' : 'right-top',
reversed: isStack ? false : true,
...(legend || {}),
};
}
Expand All @@ -94,29 +94,6 @@ function legend(params: Params<BarOptions>): Params<BarOptions> {
return deepAssign({}, params, { options: { legend } });
}

/**
* tooltip 适配器
* @param params
*/
function tooltip(params: Params<BarOptions>): Params<BarOptions> {
const { options } = params;

// 默认 legend 位置
const { seriesField, isStack } = options;
// 默认 tooltip 配置
let { tooltip } = options;
if (seriesField) {
if (tooltip !== false) {
tooltip = {
reversed: isStack ? false : true,
...(tooltip || {}),
};
}
}

return deepAssign({}, params, { options: { tooltip } });
}

/**
* coordinate 适配器
* @param params
Expand Down

0 comments on commit be7caa9

Please sign in to comment.