From d6b3ea34bfa1fed92ef47dc2c8dc4665145e7874 Mon Sep 17 00:00:00 2001 From: nickofthyme Date: Wed, 19 Feb 2020 21:20:08 -0600 Subject: [PATCH] Fix legend sizing on area charts --- .../vislib/components/legend/legend.tsx | 63 ++++++++++--------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.tsx b/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.tsx index c1563625c3b8c2..b9d218b089c31f 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/vislib/components/legend/legend.tsx @@ -53,6 +53,7 @@ export interface VisLegendState { open: boolean; labels: any[]; tableAggs: any[]; + filterableLabels: Set; selectedLabel: string | null; } @@ -68,6 +69,7 @@ export class VisLegend extends PureComponent { open, labels: [], tableAggs: [], + filterableLabels: new Set(), selectedLabel: null, }; } @@ -133,40 +135,43 @@ export class VisLegend extends PureComponent { })); }; - // Most of these functions were moved directly from the old Legend class. Not a fan of this. - setLabels = (data: any, type: string): Promise => + setFilterableLabels = (items: LegendItem[]): Promise => new Promise(async resolve => { - let labels = []; - if (CUSTOM_LEGEND_VIS_TYPES.includes(type)) { - const legendLabels = this.props.vislibVis.getLegendLabels(); - if (legendLabels) { - labels = map(legendLabels, label => { - return { label }; - }); + const filterableLabels = new Set(); + items.forEach(async item => { + const canFilter = await this.canFilter(item); + if (canFilter) { + filterableLabels.add(item.label); } - } else { - if (!data) return []; - data = data.columns || data.rows || [data]; + }); + + this.setState({ filterableLabels }, resolve); + }); - labels = type === 'pie' ? getPieNames(data) : this.getSeriesLabels(data); + setLabels = (data: any, type: string) => { + let labels = []; + if (CUSTOM_LEGEND_VIS_TYPES.includes(type)) { + const legendLabels = this.props.vislibVis.getLegendLabels(); + if (legendLabels) { + labels = map(legendLabels, label => { + return { label }; + }); } + } else { + if (!data) return []; + data = data.columns || data.rows || [data]; - const labelsConfig = await Promise.all( - labels.map(async label => ({ - ...label, - canFilter: await this.canFilter(label), - })) - ); - - this.setState( - { - labels: labelsConfig, - }, - resolve - ); + labels = type === 'pie' ? getPieNames(data) : this.getSeriesLabels(data); + } + + this.setFilterableLabels(labels); + + this.setState({ + labels, }); + }; - refresh = async () => { + refresh = () => { const vislibVis = this.props.vislibVis; if (!vislibVis || !vislibVis.visConfig) { this.setState({ @@ -193,7 +198,7 @@ export class VisLegend extends PureComponent { } this.setState({ tableAggs: getTableAggs(this.props.vis) }); - await this.setLabels(this.props.visData, vislibVis.visConfigArgs.type); + this.setLabels(this.props.visData, vislibVis.visConfigArgs.type); }; highlight = (event: BaseSyntheticEvent) => { @@ -241,7 +246,7 @@ export class VisLegend extends PureComponent { key={item.label} anchorPosition={anchorPosition} selected={this.state.selectedLabel === item.label} - canFilter={item.canFilter} + canFilter={this.state.filterableLabels.has(item.label)} onFilter={this.filter} onSelect={this.toggleDetails} legendId={this.legendId}