From 08931240524220f283345fdad65bd4fcc138c0f5 Mon Sep 17 00:00:00 2001 From: Joe Fleming Date: Mon, 14 Sep 2015 14:10:22 -0700 Subject: [PATCH] normalize legend value for filtering --- .../filter_bar/filter_bar_click_handler.js | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/ui/public/filter_bar/filter_bar_click_handler.js b/src/ui/public/filter_bar/filter_bar_click_handler.js index ca0af22b268b..db429e520574 100644 --- a/src/ui/public/filter_bar/filter_bar_click_handler.js +++ b/src/ui/public/filter_bar/filter_bar_click_handler.js @@ -3,6 +3,25 @@ define(function (require) { var dedupFilters = require('./lib/dedupFilters'); var uniqFilters = require('./lib/uniqFilters'); + function findLabel(aggBuckets, event) { + // TODO: find out if there is always a fieldFormatter + return _.filter(aggBuckets, function (obj) { + var formatter = obj.aggConfig.fieldFormatter(); + var labelParts = event.label.split(': '); + var normalizedLabel = _.slice(labelParts, 0, labelParts.length - 1).join(': '); + var formattedKey = formatter(obj.key); + return formattedKey === event.label || formattedKey === normalizedLabel; + }); + } + + function findAggConfig(values) { + if (_.isArray(values)) { // point series chart + var index = _.findIndex(values, 'aggConfigResult'); + return values[index].aggConfigResult; + } + return values.aggConfigResult; // pie chart + } + return function (Notifier) { return function ($state) { return function (event) { @@ -22,27 +41,13 @@ define(function (require) { aggConfigResult = event.point.aggConfigResult; } - function findAggConfig(values) { - if (_.isArray(values)) { // point series chart - var index = _.findIndex(values, 'aggConfigResult'); - return values[index].aggConfigResult; - } - return values.aggConfigResult; // pie chart - } - - function findLabel(obj) { - // TODO: find out if there is always a fieldFormatter - var formatter = obj.aggConfig.fieldFormatter(); - return formatter(obj.key) === event.label; - } - if (aggConfigResult) { var isLegendLabel = !!event.point.values; - var results = _.filter(aggConfigResult.getPath(), { type: 'bucket' }); + var aggBuckets = _.filter(aggConfigResult.getPath(), { type: 'bucket' }); - if (isLegendLabel) results = _.filter(results, findLabel); // filter results array by legend label + if (isLegendLabel) aggBuckets = findLabel(aggBuckets, event); - var filters = _(results) + var filters = _(aggBuckets) .map(function (result) { try { return result.createFilter();