Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Navbarextensions improvements #9871

Merged
merged 5 commits into from
Mar 24, 2017
Merged

Conversation

scampi
Copy link
Contributor

@scampi scampi commented Jan 13, 2017

close #9860

@elasticmachine
Copy link
Contributor

Can one of the admins verify this patch?

@epixa epixa added Team:Core Core services & architecture: plugins, logging, config, saved objects, http, ES client, i18n, etc review labels Jan 26, 2017
@epixa
Copy link
Contributor

epixa commented Jan 26, 2017

jenkins, test this

@scampi
Copy link
Contributor Author

scampi commented Jan 27, 2017

Looks like the test got stuck: Build was aborted

@epixa
Copy link
Contributor

epixa commented Jan 27, 2017

jenkins, test this

@scampi
Copy link
Contributor Author

scampi commented Jan 27, 2017

one test failed, i'll check what's wrong:

>> FAIL: chrome on any platform - kibana - visualize app - visualize app - tile map chart - should zoom out to level 1 from default level 2 (41196ms)
Error: tryForTime timeout: Error: expected false to equal true
    at Assertion.assert (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/expect.js/index.js:96:13)
    at Assertion.be.Assertion.equal (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/expect.js/index.js:216:10)
    at Assertion.(anonymous function) [as be] (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/expect.js/index.js:69:24)
    at Command.<anonymous> (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/test/functional/apps/visualize/_tile_map.js:74:52)
    at runCallback (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/leadfoot/Command.js:526:31)
    at Command.<anonymous> (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/leadfoot/Command.js:543:11)
    at /var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/dojo/_debug/Promise.ts:393:16
    at run (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/dojo/_debug/Promise.ts:237:8)
    at /var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/dojo/_debug/nextTick.ts:44:4
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)
    at Command.then (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/leadfoot/Command.js:542:10)
    at tryingForTime (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/test/functional/apps/visualize/_tile_map.js:72:84)
    at tryCatcher (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/bluebird/js/main/util.js:26:23)
    at Function.Promise.attempt.Promise.try (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/bluebird/js/main/method.js:31:24)
    at attempt (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/test/support/utils/try.js:45:44)
    at tryCatcher (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/bluebird/js/main/util.js:26:23)
    at Promise._settlePromiseFromHandler (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/bluebird/js/main/promise.js:503:31)
    at Promise._settlePromiseAt (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/bluebird/js/main/promise.js:577:18)
    at Promise._settlePromises (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/bluebird/js/main/promise.js:693:14)
    at Async._drainQueue (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/bluebird/js/main/async.js:123:16)
    at Async._drainQueues (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/bluebird/js/main/async.js:133:10)
    at Immediate.Async.drainQueues (/var/lib/jenkins/workspace/elastic+kibana+pull-request+multijob-selenium/node_modules/bluebird/js/main/async.js:15:14)
    at runCallback (timers.js:637:20)
    at tryOnImmediate (timers.js:610:5)
    at processImmediate [as _immediateCallback] (timers.js:582:5)
  at attempt  <test/support/utils/try.js:42:17>
  at tryCatcher  <node_modules/bluebird/js/main/util.js:26:23>
  at Promise._settlePromiseFromHandler  <node_modules/bluebird/js/main/promise.js:503:31>
  at Promise._settlePromiseAt  <node_modules/bluebird/js/main/promise.js:577:18>
  at Promise._settlePromises  <node_modules/bluebird/js/main/promise.js:693:14>
  at Async._drainQueue  <node_modules/bluebird/js/main/async.js:123:16>
  at Async._drainQueues  <node_modules/bluebird/js/main/async.js:133:10>
  at Immediate.Async.drainQueues  <node_modules/bluebird/js/main/async.js:15:14>
  at runCallback  <timers.js:637:20>
  at tryOnImmediate  <timers.js:610:5>
  at processImmediate [as _immediateCallback]  <timers.js:582:5>
  at Command.then  <node_modules/leadfoot/Command.js:542:10>
  at Test.<anonymous>  <test/functional/apps/visualize/_tile_map.js:70:8>
  at tryCatcher  <node_modules/bluebird/js/main/util.js:26:23>
  at Promise.attempt.Promise.try  <node_modules/bluebird/js/main/method.js:31:24>
  at Test.test  <test/support/utils/bdd_wrapper.js:28:36>
  at <node_modules/intern/lib/Test.js:181:24>
  at <node_modules/intern/browser_modules/dojo/_debug/Promise.ts:393:16>
  at runCallbacks  <node_modules/intern/browser_modules/dojo/_debug/Promise.ts:11:12>
  at <node_modules/intern/browser_modules/dojo/_debug/Promise.ts:317:5>
  at run  <node_modules/intern/browser_modules/dojo/_debug/Promise.ts:237:8>
  at <node_modules/intern/browser_modules/dojo/_debug/nextTick.ts:44:4>
  at _combinedTickCallback  <internal/process/next_tick.js:67:7>
  at process._tickCallback  <internal/process/next_tick.js:98:9>

@epixa
Copy link
Contributor

epixa commented Jan 27, 2017

@scampi Can you rebase on master? We had an issue with the tests that I believe is fixed now.

- added $location service to determine on which the user is at currently
@scampi
Copy link
Contributor Author

scampi commented Jan 27, 2017

@epixa rebased

@epixa
Copy link
Contributor

epixa commented Jan 27, 2017

jenkins, test this

@spalger spalger self-assigned this Feb 28, 2017
@spalger spalger self-requested a review February 28, 2017 20:15
@scampi
Copy link
Contributor Author

scampi commented Mar 2, 2017

ping ?

@spalger
Copy link
Contributor

spalger commented Mar 2, 2017

Sorry @scampi I'll take a look at this today

Copy link
Contributor

@spalger spalger left a comment

Choose a reason for hiding this comment

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

In what way is this a controller? It doesn't serve the same function as a directive's controller right? It looks like maybe describing these as scope properties, or "locals" then injecting them into scope would be a bit more correct:

topNavController.addItem({
  key: 'graph',
  template: '<pre>{{controller.text}}</pre>',
  locals: {
    controller
  }
})
const $childScope = $scope.$new();
if (this.locals[currentKey]) {
  Object.assign($childScope, this.locals[currentKey]);
}
const $el = $element.find('#template_wrapper').html(templateToRender).contents();
$compile($el)($childScope);

@@ -18,6 +18,7 @@ export default function ($compile) {
interval: intervalTemplate,
filter: filterTemplate,
};
this.controllers = [];
Copy link
Contributor

Choose a reason for hiding this comment

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

I think this is supposed to be a map or object, not an array

@scampi
Copy link
Contributor Author

scampi commented Mar 3, 2017

I wanted to do something similar to what is done in the terms bucket and its html template file. But I agree that using the locals object would (1) give more freedom; and (2) be more explicit as to its purpose. I'll change the code accordingly.

@scampi
Copy link
Contributor Author

scampi commented Mar 4, 2017

@spalger ready for another review, thanks!

I have tested with the following extension:

import registry from 'ui/registry/navbar_extensions';

registry.register(function () {
  return {
    appName: 'dashboard',
    key: 'button',
    order: 1,
    template: '<div ng-controller="controller"><h2>Hello {{name}}</h2></div>',
    locals: {
      controller($scope, $timeout) {
        $scope.name = "john";
        $timeout(function () {
          $scope.name = "conor";
        }, 500);
      }
    }
  };
});

@spalger
Copy link
Contributor

spalger commented Mar 23, 2017

Looks good @scampi. Thanks! @w33ble would you mind taking a look at this too?

@spalger spalger requested a review from w33ble March 23, 2017 08:09
@w33ble
Copy link
Contributor

w33ble commented Mar 23, 2017

This change LGTM.

I'm curious why we need it though. You can get the same functionality right now using a custom directive with its own controller.

import registry from 'ui/registry/navbar_extensions';
import modules from 'ui/modules';

const module = modules.get('example');
module.directive('nameToggleExample', () => {
  return {
    restrict: 'E',
    scope: {
      timeout: '=',
    },
    template: '<div><h2>Hello {{name}}</h2></div>',
    controller($scope, $timeout) {
      $scope.name = "john";
      $timeout(function () {
        $scope.name = "conor";
      }, $scope.timeout || 500);
    }
  };
});

registry.register(function () {
  return {
    appName: 'dashboard',
    key: 'button',
    order: 1,
    template: '<name-toggle-example timeout="500"></name-toggle-example>',
  };
});

This way navbar_extensions isn't explicitly tied to Angular, and could potentially be re-implemented some other way.

That said, @spalger if it works for you, it works for me.

@spalger
Copy link
Contributor

spalger commented Mar 24, 2017

I agree that locals can be injected with a custom directive, but I think this is simple enough to be useful and unless we reimplement angular's templating language, these navbar extensions will always be angular specific. If they were react templates then locals would be totally irrelevant (and we could drop support for them) because you could just pass values as props to your template.

@spalger spalger merged commit 590b6e0 into elastic:master Mar 24, 2017
elastic-jasper added a commit that referenced this pull request Mar 24, 2017
Backports PR #9871

**Commit 1:**
- added controller option
- added $location service to determine on which the user is at currently

* Original sha: ddc2eb5
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-01-13T17:29:50Z

**Commit 2:**
added test for the hideButton method that is dependent on the location path

* Original sha: f27a535
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-01-13T23:43:14Z

**Commit 3:**
removed  argument

* Original sha: c9d5c0c
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-01-14T13:44:35Z

**Commit 4:**
use locals object to pass variables to the template's scope

* Original sha: 07b7549
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-03-04T21:26:33Z

**Commit 5:**
use map object

* Original sha: f9ee311
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-03-04T21:33:48Z
spalger pushed a commit that referenced this pull request Mar 24, 2017
Backports PR #9871

**Commit 1:**
- added controller option
- added $location service to determine on which the user is at currently

* Original sha: ddc2eb5
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-01-13T17:29:50Z

**Commit 2:**
added test for the hideButton method that is dependent on the location path

* Original sha: f27a535
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-01-13T23:43:14Z

**Commit 3:**
removed  argument

* Original sha: c9d5c0c
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-01-14T13:44:35Z

**Commit 4:**
use locals object to pass variables to the template's scope

* Original sha: 07b7549
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-03-04T21:26:33Z

**Commit 5:**
use map object

* Original sha: f9ee311
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-03-04T21:33:48Z
@w33ble
Copy link
Contributor

w33ble commented Mar 24, 2017

you could just pass values as props to your template.

That's what I meant, the functionality works that way today, it's just props into a custom element thing (angular here, but potentially react in the future, or anything else...).

simianhacker pushed a commit to simianhacker/kibana that referenced this pull request Mar 27, 2017
* - added controller option
- added $location service to determine on which the user is at currently

* added test for the hideButton method that is dependent on the location path

* removed  argument

* use locals object to pass variables to the template's scope

* use map object
simianhacker added a commit that referenced this pull request Mar 28, 2017
…#10890)

* Removing derivative behavior... adding better tooltips to add delete

* Re-organizing metrics; Adding headers; Adding default behavoir

* Adding help text

* Additional fixes

- Fix for deactivated still being able to be added
- Added Experimental Feature to description

* [elasticsearch/healthCheck] ensure that multi.allow_explicit_index=true (#10855)

* [elasticsearch/healthCheck] ensure that multi.allow_explicit_index=true

* [elasticsearch/healthCheck] fix tests

* [eslint/console] enable no-undef rule (#10881)

* [eslint/console] enable no-undef rule

* [eslint/console] fix no-undef violations

* Navbarextensions improvements (#9871)

* - added controller option
- added $location service to determine on which the user is at currently

* added test for the hideButton method that is dependent on the location path

* removed  argument

* use locals object to pass variables to the template's scope

* use map object

* fixing percentage mode extents (#10843)

* fixes axis title for new axis (#10866)

* fixes metrics options matching (#10865)

* Add kuiLocalTab-isDisabled state. (#10830)

* Add kuiLocalTab-isDisabled state.

* Update Management header to use kuiLocalTab-isDisabled class.

* test: send content-type with proxy POST tests (#10903)

Elasticsearch now requires that content-type be sent on all requests
with payloads, so our tests should be sending it with requests as well.

* [esArchiver] combine elasticDump and ScenarioManager (#10359)

* As a part of bringing functional testing to plugins, esArchiver gives these plugins a way to capture and reload es indexes without needing to write a bunch of custom code. It works similarly to the elasticDump and ScenarioManager tools that it replaces.

Differences:
  - Streaming implementation allows for much larger archives
  - CLI for creating and using archives
  - Configurable archive location
  - Stores the data in gzipped files (better for source control, searching, large archives)
  - Automatically identifies and upgrades Kibana config documents

Methods:
  - `#load(name)`: import an archive
  - `#loadIfNeeded(name)`: import an archive, but skip the documents what belong to any existing index
  - `#unload(name)`: delete the indexes stored in an archive

CLI operations:
  - `./bin/es_archiver save <name> [index patterns...]`: save the mapping and documents in one or more indexes that match the wild-card patterns into an the `<name>` archive
  - `./bin/es_archiver load <name>`: load the mapping and documents from the `<name>` archive

* [functional_tests/common/nagivate] check for statusPage

* [es_archiver] move bins into new scripts dir

* [functional_tests/apps/context] use esArchiver

* [esArchiver] general improvements after showing to a few folks

 - remove auto-upgrading config doc logic (until we have better access to kibana version info)
 - export unload command
 - remove preemptive checks in favor of reacting to errors
 - use type "doc" vs "hit" for doc records (consistency)
 - wrote a bunch of pending tests to think though and plan

* [esArchiver] make log a stream that writes to itself

* [esArchiver] fill in stats and archive format tests

* [esArchiver] splitup action logic

* [esArchiver/cli] fix cli --help output and comment

* [esArchiver] remove type-based param coercion

* [esArchiver/log] use strings for log levels

* [esArchvier] remove unused var

* [esArchiver/indexDocRecordsStream] add tests

* [esArchive] fill in remaining tests

* [esArchiver] fix dem tests

* [eslint] remove unused vars

* [esArchiver/loadIfNeeded] fix call to load()

* [esArchiver] remove loadDumpData helpers
simianhacker added a commit that referenced this pull request Mar 28, 2017
…#10890)

* Removing derivative behavior... adding better tooltips to add delete

* Re-organizing metrics; Adding headers; Adding default behavoir

* Adding help text

* Additional fixes

- Fix for deactivated still being able to be added
- Added Experimental Feature to description

* [elasticsearch/healthCheck] ensure that multi.allow_explicit_index=true (#10855)

* [elasticsearch/healthCheck] ensure that multi.allow_explicit_index=true

* [elasticsearch/healthCheck] fix tests

* [eslint/console] enable no-undef rule (#10881)

* [eslint/console] enable no-undef rule

* [eslint/console] fix no-undef violations

* Navbarextensions improvements (#9871)

* - added controller option
- added $location service to determine on which the user is at currently

* added test for the hideButton method that is dependent on the location path

* removed  argument

* use locals object to pass variables to the template's scope

* use map object

* fixing percentage mode extents (#10843)

* fixes axis title for new axis (#10866)

* fixes metrics options matching (#10865)

* Add kuiLocalTab-isDisabled state. (#10830)

* Add kuiLocalTab-isDisabled state.

* Update Management header to use kuiLocalTab-isDisabled class.

* test: send content-type with proxy POST tests (#10903)

Elasticsearch now requires that content-type be sent on all requests
with payloads, so our tests should be sending it with requests as well.

* [esArchiver] combine elasticDump and ScenarioManager (#10359)

* As a part of bringing functional testing to plugins, esArchiver gives these plugins a way to capture and reload es indexes without needing to write a bunch of custom code. It works similarly to the elasticDump and ScenarioManager tools that it replaces.

Differences:
  - Streaming implementation allows for much larger archives
  - CLI for creating and using archives
  - Configurable archive location
  - Stores the data in gzipped files (better for source control, searching, large archives)
  - Automatically identifies and upgrades Kibana config documents

Methods:
  - `#load(name)`: import an archive
  - `#loadIfNeeded(name)`: import an archive, but skip the documents what belong to any existing index
  - `#unload(name)`: delete the indexes stored in an archive

CLI operations:
  - `./bin/es_archiver save <name> [index patterns...]`: save the mapping and documents in one or more indexes that match the wild-card patterns into an the `<name>` archive
  - `./bin/es_archiver load <name>`: load the mapping and documents from the `<name>` archive

* [functional_tests/common/nagivate] check for statusPage

* [es_archiver] move bins into new scripts dir

* [functional_tests/apps/context] use esArchiver

* [esArchiver] general improvements after showing to a few folks

 - remove auto-upgrading config doc logic (until we have better access to kibana version info)
 - export unload command
 - remove preemptive checks in favor of reacting to errors
 - use type "doc" vs "hit" for doc records (consistency)
 - wrote a bunch of pending tests to think though and plan

* [esArchiver] make log a stream that writes to itself

* [esArchiver] fill in stats and archive format tests

* [esArchiver] splitup action logic

* [esArchiver/cli] fix cli --help output and comment

* [esArchiver] remove type-based param coercion

* [esArchiver/log] use strings for log levels

* [esArchvier] remove unused var

* [esArchiver/indexDocRecordsStream] add tests

* [esArchive] fill in remaining tests

* [esArchiver] fix dem tests

* [eslint] remove unused vars

* [esArchiver/loadIfNeeded] fix call to load()

* [esArchiver] remove loadDumpData helpers
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
review Team:Core Core services & architecture: plugins, logging, config, saved objects, http, ES client, i18n, etc v5.4.0 v6.0.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

improve navbar extension
5 participants