Skip to content

Commit

Permalink
feat: tooltip formatter Closes #792
Browse files Browse the repository at this point in the history
  • Loading branch information
paleface001 committed Mar 18, 2020
1 parent 70b0b2e commit 1d6264c
Show file tree
Hide file tree
Showing 22 changed files with 360 additions and 36 deletions.
1 change: 1 addition & 0 deletions src/interface/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ export interface Legend {

export interface Tooltip {
visible?: boolean;
fields?: string[];
shared?: boolean;
/** html */
showTitle?: boolean;
Expand Down
26 changes: 24 additions & 2 deletions src/plots/area/layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ export default class AreaLayer<T extends AreaLayerConfig = AreaLayerConfig> exte
protected coord() {}

protected addGeometry() {
const props = this.options;
const props: any = this.options;
const area = getGeom('area', 'main', {
plot: this,
});
Expand All @@ -147,6 +147,11 @@ export default class AreaLayer<T extends AreaLayerConfig = AreaLayerConfig> exte
if (props.label) {
this.label();
}

if (props.tooltip && (props.tooltip.fields || props.tooltip.formatter)) {
this.geometryTooltip();
}

this.adjustArea(area);
this.setConfig('geometry', area);

Expand All @@ -168,7 +173,7 @@ export default class AreaLayer<T extends AreaLayerConfig = AreaLayerConfig> exte
}

protected addLine() {
const props = this.options;
const props: any = this.options;
const lineConfig = deepMix({}, props.line);
if (lineConfig.visible) {
const line = getGeom('line', 'guide', {
Expand Down Expand Up @@ -223,6 +228,23 @@ export default class AreaLayer<T extends AreaLayerConfig = AreaLayerConfig> exte
});
}

protected geometryTooltip() {
this.area.tooltip = {};
const tooltipOptions: any = this.options.tooltip;
if (tooltipOptions.fields) {
this.area.tooltip.fields = tooltipOptions.fields;
}
if (tooltipOptions.formatter) {
this.area.tooltip.callback = tooltipOptions.formatter;
if (!tooltipOptions.fields) {
this.area.tooltip.fields = [this.options.xField, this.options.yField];
if (this.options.seriesField) {
this.area.tooltip.fields.push(this.options.seriesField);
}
}
}
}

protected parseEvents(eventParser) {
super.parseEvents(EventParser);
}
Expand Down
24 changes: 23 additions & 1 deletion src/plots/bar/layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ export default class BaseBarLayer<T extends BarLayerConfig = BarLayerConfig> ext
protected adjustBar(bar: ElementOption) {}

protected addGeometry() {
const props = this.options;
const props: any = this.options;
const bar = getGeom('interval', 'main', {
positionFields: [props.yField, props.xField],
plot: this,
Expand All @@ -222,6 +222,11 @@ export default class BaseBarLayer<T extends BarLayerConfig = BarLayerConfig> ext
}
this.adjustBar(bar);
this.bar = bar;

if (props.tooltip && (props.tooltip.fields || props.tooltip.formatter)) {
this.geometryTooltip();
}

this.setConfig('geometry', bar);
}

Expand Down Expand Up @@ -253,6 +258,23 @@ export default class BaseBarLayer<T extends BarLayerConfig = BarLayerConfig> ext
}
}

protected geometryTooltip() {
this.bar.tooltip = {};
const tooltipOptions: any = this.options.tooltip;
if (tooltipOptions.fields) {
this.bar.tooltip.fields = tooltipOptions.fields;
}
if (tooltipOptions.formatter) {
this.bar.tooltip.callback = tooltipOptions.formatter;
if (!tooltipOptions.fields) {
this.bar.tooltip.fields = [this.options.xField, this.options.yField];
if (this.options.colorField) {
this.bar.tooltip.fields.push(this.options.colorField);
}
}
}
}

private applyResponsive(stage) {
const methods = responsiveMethods[stage];
each(methods, (r) => {
Expand Down
16 changes: 16 additions & 0 deletions src/plots/bubble/layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,22 @@ export default class BubbleLayer<T extends BubbleLayerConfig = BubbleLayerConfig
protected parseEvents() {
super.parseEvents(EventParser);
}

protected extractTooltip() {
this.points.tooltip = {};
const tooltipOptions: any = this.options.tooltip;
if (tooltipOptions.fields) {
this.points.tooltip.fields = tooltipOptions.fields;
} else {
this.points.tooltip.fields = [this.options.xField, this.options.yField, this.options.sizeField];
}
if (tooltipOptions.formatter) {
this.points.tooltip.callback = tooltipOptions.formatter;
if (this.options.colorField) {
this.points.tooltip.fields.push(this.options.colorField);
}
}
}
}

registerPlotType('bubble', BubbleLayer);
20 changes: 19 additions & 1 deletion src/plots/calendar/layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ export default class CalendarLayer extends ViewLayer<CalendarLayerConfig> {
}

protected addGeometry(): void {
const { valueField, colors } = this.options;
const { valueField, colors, tooltip } = this.options;
const polygonConfig: any = {
type: 'polygon',
position: {
Expand All @@ -125,9 +125,27 @@ export default class CalendarLayer extends ViewLayer<CalendarLayerConfig> {
label: this.extractLabel(),
};

if (tooltip && (tooltip.fields || tooltip.formatter)) {
this.geometryTooltip(polygonConfig);
}

this.setConfig('geometry', polygonConfig);
}

protected geometryTooltip(geomConfig) {
geomConfig.tooltip = {};
const tooltipOptions: any = this.options.tooltip;
if (tooltipOptions.fields) {
geomConfig.tooltip.fields = tooltipOptions.fields;
}
if (tooltipOptions.formatter) {
geomConfig.tooltip.callback = tooltipOptions.formatter;
if (!tooltipOptions.fields) {
geomConfig.tooltip.fields = [WEEK_FIELD, DAY_FIELD];
}
}
}

private extractLabel() {
const props = this.options;
const label = props.label;
Expand Down
20 changes: 20 additions & 0 deletions src/plots/column/layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,29 @@ export default class BaseColumnLayer<T extends ColumnLayerConfig = ColumnLayerCo
}
this.adjustColumn(column);
this.column = column;
if (options.tooltip && (options.tooltip.fields || options.tooltip.formatter)) {
this.geometryTooltip();
}
this.setConfig('geometry', column);
}

protected geometryTooltip() {
this.column.tooltip = {};
const tooltipOptions: any = this.options.tooltip;
if (tooltipOptions.fields) {
this.column.tooltip.fields = tooltipOptions.fields;
}
if (tooltipOptions.formatter) {
this.column.tooltip.callback = tooltipOptions.formatter;
if (!tooltipOptions.fields) {
this.column.tooltip.fields = [this.options.xField, this.options.yField];
if (this.options.colorField) {
this.column.tooltip.fields.push(this.options.colorField);
}
}
}
}

protected animation() {
super.animation();
if (this.options.animation === false) {
Expand Down
21 changes: 21 additions & 0 deletions src/plots/density-heatmap/layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,10 @@ export default class DensityHeatmapLayer<
config.intensity = this.options.intensity;
}

if (this.options.tooltip && (this.options.tooltip.fields || this.options.tooltip.formatter)) {
this.geometryTooltip(config);
}

this.setConfig('geometry', config);

this.addPoint();
Expand Down Expand Up @@ -220,6 +224,23 @@ export default class DensityHeatmapLayer<
this.setConfig('legends', false);
}

protected geometryTooltip(config) {
config.tooltip = {};
const tooltipOptions: any = this.options.tooltip;
if (tooltipOptions.fields) {
config.tooltip.fields = tooltipOptions.fields;
}
if (tooltipOptions.formatter) {
config.tooltip.callback = tooltipOptions.formatter;
if (!tooltipOptions.fields) {
config.tooltip.fields = [this.options.xField, this.options.yField];
if (this.options.colorField) {
config.tooltip.fields.push(this.options.colorField);
}
}
}
}

protected parseEvents(eventParser) {
super.parseEvents(EventParser);
}
Expand Down
14 changes: 14 additions & 0 deletions src/plots/grouped-bar/layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,20 @@ export default class GroupedBarLayer extends BaseBarLayer<GroupedBarLayerConfig>
},
];
}

protected geometryTooltip() {
this.bar.tooltip = {};
const tooltipOptions: any = this.options.tooltip;
if (tooltipOptions.fields) {
this.bar.tooltip.fields = tooltipOptions.fields;
}
if (tooltipOptions.formatter) {
this.bar.tooltip.callback = tooltipOptions.formatter;
if (!tooltipOptions.fields) {
this.bar.tooltip.fields = [this.options.xField, this.options.yField, this.options.groupField];
}
}
}
}

registerPlotType('groupedBar', GroupedBarLayer);
14 changes: 14 additions & 0 deletions src/plots/grouped-column/layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,20 @@ export default class GroupedColumnLayer extends BaseColumnLayer<GroupedColumnLay
},
];
}

protected geometryTooltip() {
this.column.tooltip = {};
const tooltipOptions: any = this.options.tooltip;
if (tooltipOptions.fields) {
this.column.tooltip.fields = tooltipOptions.fields;
}
if (tooltipOptions.formatter) {
this.column.tooltip.callback = tooltipOptions.formatter;
if (!tooltipOptions.fields) {
this.column.tooltip.fields = [this.options.xField, this.options.yField, this.options.groupField];
}
}
}
}

registerPlotType('groupedColumn', GroupedColumnLayer);
14 changes: 14 additions & 0 deletions src/plots/grouped-rose/layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,20 @@ export default class GroupedRoseLayer<T extends GroupedRoseLayerConfig = Grouped
},
];
}

protected geometryTooltip() {
this.rose.tooltip = {};
const tooltipOptions: any = this.options.tooltip;
if (tooltipOptions.fields) {
this.rose.tooltip.fields = tooltipOptions.fields;
}
if (tooltipOptions.formatter) {
this.rose.tooltip.callback = tooltipOptions.formatter;
if (!tooltipOptions.fields) {
this.rose.tooltip.fields = [this.options.radiusField, this.options.categoryField, this.options.groupField];
}
}
}
}

registerPlotType('groupedRose', GroupedRoseLayer);
28 changes: 25 additions & 3 deletions src/plots/heatmap/layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,13 +153,18 @@ export default class HeatmapLayer<T extends HeatmapLayerConfig = HeatmapLayerCon

protected addGeometry() {
this.gridSize = this.getGridSize();
let geomConfig;
if (this.options.shapeType === 'rect') {
const rect = this.addRect();
this.setConfig('geometry', rect);
geomConfig = this.addRect();
} else {
const circle = this.addCircle();
this.setConfig('geometry', circle);
geomConfig = circle;
}
if (this.options.tooltip && (this.options.tooltip.fields || this.options.tooltip.formatter)) {
this.geometryTooltip(geomConfig);
}

this.setConfig('geometry', geomConfig);
}

protected addRect() {
Expand Down Expand Up @@ -231,6 +236,23 @@ export default class HeatmapLayer<T extends HeatmapLayerConfig = HeatmapLayerCon
return circle;
}

protected geometryTooltip(config) {
config.tooltip = {};
const tooltipOptions: any = this.options.tooltip;
if (tooltipOptions.fields) {
config.tooltip.fields = tooltipOptions.fields;
}
if (tooltipOptions.formatter) {
config.tooltip.callback = tooltipOptions.formatter;
if (!tooltipOptions.fields) {
config.tooltip.fields = [this.options.xField, this.options.yField];
if (this.options.colorField) {
config.tooltip.fields.push(this.options.colorField);
}
}
}
}

private getGridSize() {
if (this.options.padding === 'auto') {
return [0, 0];
Expand Down
24 changes: 23 additions & 1 deletion src/plots/line/layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,14 +147,19 @@ export default class LineLayer<T extends LineLayerConfig = LineLayerConfig> exte
}

private addLine() {
const props = this.options;
const props: any = this.options;
this.line = getGeom('line', 'main', {
plot: this,
});

if (props.label) {
this.label();
}

if (props.tooltip && (props.tooltip.fields || props.tooltip.formatter)) {
this.geometryTooltip();
}

this.setConfig('geometry', this.line);
}

Expand Down Expand Up @@ -193,6 +198,23 @@ export default class LineLayer<T extends LineLayerConfig = LineLayerConfig> exte
}
}

protected geometryTooltip() {
this.line.tooltip = {};
const tooltipOptions: any = this.options.tooltip;
if (tooltipOptions.fields) {
this.line.tooltip.fields = tooltipOptions.fields;
}
if (tooltipOptions.formatter) {
this.line.tooltip.callback = tooltipOptions.formatter;
if (!tooltipOptions.fields) {
this.line.tooltip.fields = [this.options.xField, this.options.yField];
if (this.options.seriesField) {
this.line.tooltip.fields.push(this.options.seriesField);
}
}
}
}

protected animation() {
super.animation();
const props = this.options;
Expand Down
Loading

1 comment on commit 1d6264c

@xudihui
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

期待tooltip的自定义格式,感谢大佬

Please # to comment.