From 3144994c1965ead514a25c015492ed5eb9836ef4 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Thu, 15 Dec 2016 20:50:45 -0600 Subject: [PATCH] [dev tools] Hide app link when there are no tools (#9489) * [dev tools] Hide app link when there are no tools * [dev tools] Add tests for setting app as hidden --- src/core_plugins/kibana/index.js | 1 + .../lib/__tests__/hide_empty_tools.js | 44 +++++++++++++++++++ .../public/dev_tools/lib/hide_empty_tools.js | 10 +++++ src/core_plugins/kibana/public/kibana.js | 2 + 4 files changed, 57 insertions(+) create mode 100644 src/core_plugins/kibana/public/dev_tools/lib/__tests__/hide_empty_tools.js create mode 100644 src/core_plugins/kibana/public/dev_tools/lib/hide_empty_tools.js diff --git a/src/core_plugins/kibana/index.js b/src/core_plugins/kibana/index.js index 0eaeb10ece33..447dc00f578a 100644 --- a/src/core_plugins/kibana/index.js +++ b/src/core_plugins/kibana/index.js @@ -74,6 +74,7 @@ module.exports = function (kibana) { description: 'compose visualizations for much win', icon: 'plugins/kibana/assets/dashboard.svg', }, { + id: 'kibana:dev_tools', title: 'Dev Tools', order: 9001, url: '/app/kibana#/dev_tools', diff --git a/src/core_plugins/kibana/public/dev_tools/lib/__tests__/hide_empty_tools.js b/src/core_plugins/kibana/public/dev_tools/lib/__tests__/hide_empty_tools.js new file mode 100644 index 000000000000..ba367ebf252a --- /dev/null +++ b/src/core_plugins/kibana/public/dev_tools/lib/__tests__/hide_empty_tools.js @@ -0,0 +1,44 @@ +import ngMock from 'ng_mock'; +import expect from 'expect.js'; +import sinon from 'sinon'; + +import chrome from 'ui/chrome'; +import { hideEmptyDevTools } from '../hide_empty_tools'; + +describe('hide dev tools', function () { + let Private; + let navlinks; + + function PrivateWithoutTools() { + return []; + } + + function PrivateWithTools() { + return ['tool1', 'tool2']; + } + + function isHidden() { + return !!chrome.getNavLinkById('kibana:dev_tools').hidden; + } + + beforeEach(function () { + navlinks = {}; + sinon.stub(chrome, 'getNavLinkById',function () { + return navlinks; + }); + }); + + it('should hide the app if there are no dev tools', function () { + hideEmptyDevTools(PrivateWithTools); + expect(isHidden()).to.be(false); + }); + + it('should not hide the app if there are tools', function () { + hideEmptyDevTools(PrivateWithoutTools); + expect(isHidden()).to.be(true); + }); + + afterEach(function () { + chrome.getNavLinkById.restore(); + }); +}); diff --git a/src/core_plugins/kibana/public/dev_tools/lib/hide_empty_tools.js b/src/core_plugins/kibana/public/dev_tools/lib/hide_empty_tools.js new file mode 100644 index 000000000000..2b605f8fdf86 --- /dev/null +++ b/src/core_plugins/kibana/public/dev_tools/lib/hide_empty_tools.js @@ -0,0 +1,10 @@ +import chrome from 'ui/chrome'; +import DevToolsRegistryProvider from 'ui/registry/dev_tools'; + +export function hideEmptyDevTools(Private) { + const hasTools = !!Private(DevToolsRegistryProvider).length; + if (!hasTools) { + const navLink = chrome.getNavLinkById('kibana:dev_tools'); + navLink.hidden = true; + } +} diff --git a/src/core_plugins/kibana/public/kibana.js b/src/core_plugins/kibana/public/kibana.js index 5815cc33c2d1..4a5e059c90ef 100644 --- a/src/core_plugins/kibana/public/kibana.js +++ b/src/core_plugins/kibana/public/kibana.js @@ -20,6 +20,7 @@ import 'ui/agg_types'; import 'ui/timepicker'; import Notifier from 'ui/notify/notifier'; import 'leaflet'; +import { hideEmptyDevTools } from './dev_tools/lib/hide_empty_tools'; routes.enable(); @@ -49,3 +50,4 @@ chrome }); modules.get('kibana').run(Notifier.pullMessageFromUrl); +modules.get('kibana').run(hideEmptyDevTools);