From 94c4f7b3d011168f44cf8e62bdb15f4a02edfed7 Mon Sep 17 00:00:00 2001 From: Justin Pomeroy Date: Tue, 19 Jan 2016 10:52:25 -0600 Subject: [PATCH] Fix metadata tree available filter This patch updates the filtering of the available metadata items in the Update Metadata modal so that any leaf with either a display value or property name that matches will be displayed. Parent items of any matching leaf are also displayed so context and the tree structure are preserved. Closes-Bug: #1519535 Closes-Bug: #1519567 Closes-Bug: #1463733 Change-Id: I11caf506a851807cb3b079184dd260db6862b3d9 --- .../metadata/tree/metadata-tree.controller.js | 26 +++++++++++++++++-- .../widgets/metadata/tree/metadata-tree.html | 2 +- .../widgets/metadata/tree/tree.spec.js | 23 ++++++++++++++++ 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/horizon/static/framework/widgets/metadata/tree/metadata-tree.controller.js b/horizon/static/framework/widgets/metadata/tree/metadata-tree.controller.js index 56dd4afa32..5baef0da97 100644 --- a/horizon/static/framework/widgets/metadata/tree/metadata-tree.controller.js +++ b/horizon/static/framework/widgets/metadata/tree/metadata-tree.controller.js @@ -35,6 +35,7 @@ var ctrl = this; ctrl.availableFilter = availableFilter; + ctrl.quickFilter = quickFilter; ctrl.text = angular.extend({}, defaults.text, ctrl.text); if (!ctrl.tree) { ctrl.tree = new metadataTreeService.Tree(ctrl.available, ctrl.existing); @@ -46,8 +47,29 @@ }; function availableFilter(item) { - return !item.added && ( - ctrl.filterText.available.length === 0 ? item.visible : true); + return !item.added && item.visible; + } + + /** + * @ngdoc method + * @name MetadataTreeController.quickFilter + * @description + * Method used for filtering the list of available metadata items based on a user entered + * string value. The list of items is filtered such that any leaf with a display value or + * property name matching the provided string will be displayed. Parent items of any matching + * leaf are also displayed so context and the tree structure are preserved. + * @param {object} item The metadata tree item to filter. + * @return {boolean} true if item matches, false otherwise + */ + function quickFilter(item) { + var text = ctrl.filterText.available; + if (!text) { + return true; + } + if (item.children.length > 0) { + return item.children.filter(quickFilter).length > 0; + } + return item.label.indexOf(text) > -1 || item.leaf.name.indexOf(text) > -1; } } diff --git a/horizon/static/framework/widgets/metadata/tree/metadata-tree.html b/horizon/static/framework/widgets/metadata/tree/metadata-tree.html index 719d73038c..ffe060c4f9 100644 --- a/horizon/static/framework/widgets/metadata/tree/metadata-tree.html +++ b/horizon/static/framework/widgets/metadata/tree/metadata-tree.html @@ -47,7 +47,7 @@ -