From 339e38b96a9ae5fe00595c71dc3444e720c65f83 Mon Sep 17 00:00:00 2001 From: Pete Harverson Date: Fri, 7 Dec 2018 16:12:38 +0000 Subject: [PATCH] [ML] Implement k7 breadcrumbs for ML routes (#26774) * [ML] Implement k7 breadcrumbs for ML routes * [ML] Remove duplicate nouns from jobs and settings breadcrumbs --- x-pack/plugins/ml/public/breadcrumbs.js | 11 +++ .../ml/public/components/nav_menu/nav_menu.js | 86 +++++++++--------- .../ml/public/datavisualizer/breadcrumbs.js | 18 ++++ .../datavisualizer_controller.js | 2 + .../datavisualizer/selector/directive.js | 2 + .../plugins/ml/public/explorer/breadcrumbs.js | 18 ++++ .../ml/public/explorer/explorer_controller.js | 2 + .../public/file_datavisualizer/breadcrumbs.js | 18 ++++ .../file_datavisualizer_directive.js | 2 + x-pack/plugins/ml/public/jobs/breadcrumbs.js | 87 +++++++++++++++++++ .../ml/public/jobs/jobs_list/directive.js | 2 + .../new_job/advanced/new_job_controller.js | 3 + .../create_job/create_job_controller.js | 2 + .../create_job/create_job_controller.js | 2 + .../create_job/create_job_controller.js | 2 + .../create_job/create_job_controller.js | 2 + .../index_or_search_controller.js | 3 + .../steps/job_type/job_type_controller.js | 2 + .../plugins/ml/public/settings/breadcrumbs.js | 77 ++++++++++++++++ .../settings/filter_lists/edit/directive.js | 3 + .../settings/filter_lists/list/directive.js | 2 + .../calendars_list_controller.js | 2 + .../create_calendar_controller.js | 3 + .../ml/public/settings/settings_controller.js | 2 + .../public/timeseriesexplorer/breadcrumbs.js | 18 ++++ .../timeseriesexplorer_controller.js | 2 + 26 files changed, 332 insertions(+), 41 deletions(-) create mode 100644 x-pack/plugins/ml/public/breadcrumbs.js create mode 100644 x-pack/plugins/ml/public/datavisualizer/breadcrumbs.js create mode 100644 x-pack/plugins/ml/public/explorer/breadcrumbs.js create mode 100644 x-pack/plugins/ml/public/file_datavisualizer/breadcrumbs.js create mode 100644 x-pack/plugins/ml/public/jobs/breadcrumbs.js create mode 100644 x-pack/plugins/ml/public/settings/breadcrumbs.js create mode 100644 x-pack/plugins/ml/public/timeseriesexplorer/breadcrumbs.js diff --git a/x-pack/plugins/ml/public/breadcrumbs.js b/x-pack/plugins/ml/public/breadcrumbs.js new file mode 100644 index 000000000000..f5deeff4cf25 --- /dev/null +++ b/x-pack/plugins/ml/public/breadcrumbs.js @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + + +export const ML_BREADCRUMB = Object.freeze({ + text: 'Machine Learning', + href: '#/' +}); diff --git a/x-pack/plugins/ml/public/components/nav_menu/nav_menu.js b/x-pack/plugins/ml/public/components/nav_menu/nav_menu.js index 12425b7fa6c5..da2915450449 100644 --- a/x-pack/plugins/ml/public/components/nav_menu/nav_menu.js +++ b/x-pack/plugins/ml/public/components/nav_menu/nav_menu.js @@ -5,8 +5,6 @@ */ - -import _ from 'lodash'; import $ from 'jquery'; import template from './nav_menu.html'; import uiRouter from 'ui/routes'; @@ -23,8 +21,6 @@ module.directive('mlNavMenu', function (config) { template, link: function (scope, el, attrs) { - - // Tabs scope.name = attrs.name; @@ -43,46 +39,54 @@ module.directive('mlNavMenu', function (config) { scope.disableLinks = (isFullLicense() === false); - // Breadcrumbs - const crumbNames = { - jobs: { label: 'Job Management', url: '#/jobs' }, - new_job: { label: 'Create New Job', url: '#/jobs/new_job' }, - single_metric: { label: 'Single Metric Job', url: '' }, - multi_metric: { label: 'Multi Metric job', url: '' }, - population: { label: 'Population job', url: '' }, - advanced: { label: 'Advanced Job Configuration', url: '' }, - datavisualizer: { label: 'Data Visualizer', url: '' }, - filedatavisualizer: { label: 'File Data Visualizer (Experimental)', url: '' }, - explorer: { label: 'Anomaly Explorer', url: '#/explorer' }, - timeseriesexplorer: { label: 'Single Metric Viewer', url: '#/timeseriesexplorer' }, - settings: { label: 'Settings', url: '#/settings' }, - calendars_list: { label: 'Calendar Management', url: '#/settings/calendars_list' }, - new_calendar: { label: 'New Calendar', url: '#/settings/calendars_list/new_calendar' }, - edit_calendar: { label: 'Edit Calendar', url: '#/settings/calendars_list/edit_calendar' }, - filter_lists: { label: 'Filter Lists', url: '#/settings/filter_lists' }, - new_filter_list: { label: 'New Filter List', url: '#/settings/filter_lists/new' }, - edit_filter_list: { label: 'Edit Filter List', url: '#/settings/filter_lists/edit' }, - }; + // TODO - once the k7design flag is disabled, this should all be removed. + const isK7Design = chrome.getUiSettingsClient().get('k7design', false); + if (isK7Design === false) { + // Breadcrumbs + const crumbNames = { + jobs: { label: 'Job Management', url: '#/jobs' }, + new_job: { label: 'Create New Job', url: '#/jobs/new_job' }, + single_metric: { label: 'Single Metric Job', url: '' }, + multi_metric: { label: 'Multi Metric job', url: '' }, + population: { label: 'Population job', url: '' }, + advanced: { label: 'Advanced Job Configuration', url: '' }, + datavisualizer: { label: 'Data Visualizer', url: '' }, + filedatavisualizer: { label: 'File Data Visualizer (Experimental)', url: '' }, + explorer: { label: 'Anomaly Explorer', url: '#/explorer' }, + timeseriesexplorer: { label: 'Single Metric Viewer', url: '#/timeseriesexplorer' }, + settings: { label: 'Settings', url: '#/settings' }, + calendars_list: { label: 'Calendar Management', url: '#/settings/calendars_list' }, + new_calendar: { label: 'New Calendar', url: '#/settings/calendars_list/new_calendar' }, + edit_calendar: { label: 'Edit Calendar', url: '#/settings/calendars_list/edit_calendar' }, + filter_lists: { label: 'Filter Lists', url: '#/settings/filter_lists' }, + new_filter_list: { label: 'New Filter List', url: '#/settings/filter_lists/new' }, + edit_filter_list: { label: 'Edit Filter List', url: '#/settings/filter_lists/edit' }, + }; - const breadcrumbs = [{ label: 'Machine Learning', url: '#/' }]; + const breadcrumbs = [{ label: 'Machine Learning', url: '#/' }]; - // get crumbs from url - const crumbs = uiRouter.getBreadcrumbs(); - _.each(crumbs, (crumb) => { - breadcrumbs.push(crumbNames[crumb.id]); - }); - scope.breadcrumbs = breadcrumbs.filter(Boolean); - - config.watch('k7design', (val) => scope.showPluginBreadcrumbs = !val); - chrome.breadcrumbs.set(scope.breadcrumbs.map(b => ({ text: b.label, href: b.url }))); - - // when the page loads, focus on the first breadcrumb - el.ready(() => { - const $crumbs = $('.kuiLocalBreadcrumbs a'); - if ($crumbs.length) { - $crumbs[0].focus(); + // get crumbs from url + const crumbs = uiRouter.getBreadcrumbs(); + if (crumbs.length > 1) { + crumbs.forEach((crumb) => { + breadcrumbs.push(crumbNames[crumb.id]); + }); } - }); + + scope.breadcrumbs = breadcrumbs.filter(Boolean); + + config.watch('k7design', (val) => scope.showPluginBreadcrumbs = !val); + chrome.breadcrumbs.set(scope.breadcrumbs.map(b => ({ text: b.label, href: b.url }))); + + // when the page loads, focus on the first breadcrumb + el.ready(() => { + const $crumbs = $('.kuiLocalBreadcrumbs a'); + if ($crumbs.length) { + $crumbs[0].focus(); + } + }); + } + } }; }); diff --git a/x-pack/plugins/ml/public/datavisualizer/breadcrumbs.js b/x-pack/plugins/ml/public/datavisualizer/breadcrumbs.js new file mode 100644 index 000000000000..d7278ee83c90 --- /dev/null +++ b/x-pack/plugins/ml/public/datavisualizer/breadcrumbs.js @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + + +import { ML_BREADCRUMB } from '../breadcrumbs'; + + +export function getDataVisualizerBreadcrumbs() { + // Whilst top level nav menu with tabs remains, + // use root ML breadcrumb. + return [ + ML_BREADCRUMB + ]; +} + diff --git a/x-pack/plugins/ml/public/datavisualizer/datavisualizer_controller.js b/x-pack/plugins/ml/public/datavisualizer/datavisualizer_controller.js index 48ea057218ca..f26118647cad 100644 --- a/x-pack/plugins/ml/public/datavisualizer/datavisualizer_controller.js +++ b/x-pack/plugins/ml/public/datavisualizer/datavisualizer_controller.js @@ -22,6 +22,7 @@ import { decorateQuery, luceneStringToDsl } from '@kbn/es-query'; import { notify, toastNotifications } from 'ui/notify'; import { ML_JOB_FIELD_TYPES, KBN_FIELD_TYPES } from 'plugins/ml/../common/constants/field_types'; +import { getDataVisualizerBreadcrumbs } from './breadcrumbs'; import { kbnTypeToMLJobType } from 'plugins/ml/util/field_types_utils'; import { IntervalHelperProvider } from 'plugins/ml/util/ml_time_buckets'; import { checkBasicLicense, isFullLicense } from 'plugins/ml/license/check_license'; @@ -36,6 +37,7 @@ import template from './datavisualizer.html'; uiRoutes .when('/jobs/new_job/datavisualizer', { template, + k7Breadcrumbs: getDataVisualizerBreadcrumbs, resolve: { CheckLicense: checkBasicLicense, privileges: checkGetJobsPrivilege, diff --git a/x-pack/plugins/ml/public/datavisualizer/selector/directive.js b/x-pack/plugins/ml/public/datavisualizer/selector/directive.js index 206ebcd96ed8..7fd91f5c1333 100644 --- a/x-pack/plugins/ml/public/datavisualizer/selector/directive.js +++ b/x-pack/plugins/ml/public/datavisualizer/selector/directive.js @@ -9,6 +9,7 @@ import 'ngreact'; import { uiModules } from 'ui/modules'; const module = uiModules.get('apps/ml', ['react']); +import { getDataVisualizerBreadcrumbs } from '../breadcrumbs'; import { checkBasicLicense } from 'plugins/ml/license/check_license'; import { checkFindFileStructurePrivilege } from 'plugins/ml/privilege/check_privilege'; import { initPromise } from 'plugins/ml/util/promise'; @@ -20,6 +21,7 @@ const template = ``; uiRoutes .when('/jobs/?', { template, + k7Breadcrumbs: getJobManagementBreadcrumbs, resolve: { CheckLicense: checkFullLicense, privileges: checkGetJobsPrivilege, diff --git a/x-pack/plugins/ml/public/jobs/new_job/advanced/new_job_controller.js b/x-pack/plugins/ml/public/jobs/new_job/advanced/new_job_controller.js index db1a1426c471..ac366227bb07 100644 --- a/x-pack/plugins/ml/public/jobs/new_job/advanced/new_job_controller.js +++ b/x-pack/plugins/ml/public/jobs/new_job/advanced/new_job_controller.js @@ -18,6 +18,7 @@ import { checkFullLicense } from 'plugins/ml/license/check_license'; import { checkCreateJobsPrivilege } from 'plugins/ml/privilege/check_privilege'; import template from './new_job.html'; import saveStatusTemplate from 'plugins/ml/jobs/new_job/advanced/save_status_modal/save_status_modal.html'; +import { getAdvancedJobConfigurationBreadcrumbs } from 'plugins/ml/jobs/breadcrumbs'; import { SearchItemsProvider, createJobForSaving, @@ -42,6 +43,7 @@ import { initPromise } from 'plugins/ml/util/promise'; uiRoutes .when('/jobs/new_job/advanced', { template, + k7Breadcrumbs: getAdvancedJobConfigurationBreadcrumbs, resolve: { CheckLicense: checkFullLicense, privileges: checkCreateJobsPrivilege, @@ -55,6 +57,7 @@ uiRoutes }) .when('/jobs/new_job/advanced/:jobId', { template, + k7Breadcrumbs: getAdvancedJobConfigurationBreadcrumbs, resolve: { CheckLicense: checkFullLicense, privileges: checkCreateJobsPrivilege, diff --git a/x-pack/plugins/ml/public/jobs/new_job/simple/multi_metric/create_job/create_job_controller.js b/x-pack/plugins/ml/public/jobs/new_job/simple/multi_metric/create_job/create_job_controller.js index b40b0947b11e..d46e228a050c 100644 --- a/x-pack/plugins/ml/public/jobs/new_job/simple/multi_metric/create_job/create_job_controller.js +++ b/x-pack/plugins/ml/public/jobs/new_job/simple/multi_metric/create_job/create_job_controller.js @@ -19,6 +19,7 @@ import uiRoutes from 'ui/routes'; import { checkLicenseExpired } from 'plugins/ml/license/check_license'; import { checkCreateJobsPrivilege } from 'plugins/ml/privilege/check_privilege'; import { IntervalHelperProvider } from 'plugins/ml/util/ml_time_buckets'; +import { getCreateMultiMetricJobBreadcrumbs } from 'plugins/ml/jobs/breadcrumbs'; import { filterAggTypes } from 'plugins/ml/jobs/new_job/simple/components/utils/filter_agg_types'; import { validateJob } from 'plugins/ml/jobs/new_job/simple/components/utils/validate_job'; import { adjustIntervalDisplayed } from 'plugins/ml/jobs/new_job/simple/components/utils/adjust_interval'; @@ -47,6 +48,7 @@ import { timefilter } from 'ui/timefilter'; uiRoutes .when('/jobs/new_job/simple/multi_metric', { template, + k7Breadcrumbs: getCreateMultiMetricJobBreadcrumbs, resolve: { CheckLicense: checkLicenseExpired, privileges: checkCreateJobsPrivilege, diff --git a/x-pack/plugins/ml/public/jobs/new_job/simple/population/create_job/create_job_controller.js b/x-pack/plugins/ml/public/jobs/new_job/simple/population/create_job/create_job_controller.js index 8bef479ed0b6..47fc87cb00ec 100644 --- a/x-pack/plugins/ml/public/jobs/new_job/simple/population/create_job/create_job_controller.js +++ b/x-pack/plugins/ml/public/jobs/new_job/simple/population/create_job/create_job_controller.js @@ -19,6 +19,7 @@ import uiRoutes from 'ui/routes'; import { checkLicenseExpired } from 'plugins/ml/license/check_license'; import { checkCreateJobsPrivilege } from 'plugins/ml/privilege/check_privilege'; import { IntervalHelperProvider } from 'plugins/ml/util/ml_time_buckets'; +import { getCreatePopulationJobBreadcrumbs } from 'plugins/ml/jobs/breadcrumbs'; import { filterAggTypes } from 'plugins/ml/jobs/new_job/simple/components/utils/filter_agg_types'; import { validateJob } from 'plugins/ml/jobs/new_job/simple/components/utils/validate_job'; import { adjustIntervalDisplayed } from 'plugins/ml/jobs/new_job/simple/components/utils/adjust_interval'; @@ -46,6 +47,7 @@ import { timefilter } from 'ui/timefilter'; uiRoutes .when('/jobs/new_job/simple/population', { template, + k7Breadcrumbs: getCreatePopulationJobBreadcrumbs, resolve: { CheckLicense: checkLicenseExpired, privileges: checkCreateJobsPrivilege, diff --git a/x-pack/plugins/ml/public/jobs/new_job/simple/recognize/create_job/create_job_controller.js b/x-pack/plugins/ml/public/jobs/new_job/simple/recognize/create_job/create_job_controller.js index 21580cd85cf6..47265c841394 100644 --- a/x-pack/plugins/ml/public/jobs/new_job/simple/recognize/create_job/create_job_controller.js +++ b/x-pack/plugins/ml/public/jobs/new_job/simple/recognize/create_job/create_job_controller.js @@ -10,6 +10,7 @@ import _ from 'lodash'; import angular from 'angular'; import dateMath from '@elastic/datemath'; import { isJobIdValid, prefixDatafeedId } from 'plugins/ml/../common/util/job_utils'; +import { getCreateRecognizerJobBreadcrumbs } from 'plugins/ml/jobs/breadcrumbs'; import { SearchItemsProvider, addNewJobToRecentlyAccessed } from 'plugins/ml/jobs/new_job/utils/new_job_utils'; @@ -29,6 +30,7 @@ import { timefilter } from 'ui/timefilter'; uiRoutes .when('/jobs/new_job/simple/recognize', { template, + k7Breadcrumbs: getCreateRecognizerJobBreadcrumbs, resolve: { CheckLicense: checkLicenseExpired, privileges: checkCreateJobsPrivilege, diff --git a/x-pack/plugins/ml/public/jobs/new_job/simple/single_metric/create_job/create_job_controller.js b/x-pack/plugins/ml/public/jobs/new_job/simple/single_metric/create_job/create_job_controller.js index f979ee6023c6..a5a0cfce6a6b 100644 --- a/x-pack/plugins/ml/public/jobs/new_job/simple/single_metric/create_job/create_job_controller.js +++ b/x-pack/plugins/ml/public/jobs/new_job/simple/single_metric/create_job/create_job_controller.js @@ -20,6 +20,7 @@ import { getSafeAggregationName } from 'plugins/ml/../common/util/job_utils'; import { checkLicenseExpired } from 'plugins/ml/license/check_license'; import { checkCreateJobsPrivilege } from 'plugins/ml/privilege/check_privilege'; import { IntervalHelperProvider } from 'plugins/ml/util/ml_time_buckets'; +import { getCreateSingleMetricJobBreadcrumbs } from 'plugins/ml/jobs/breadcrumbs'; import { filterAggTypes } from 'plugins/ml/jobs/new_job/simple/components/utils/filter_agg_types'; import { validateJob } from 'plugins/ml/jobs/new_job/simple/components/utils/validate_job'; import { adjustIntervalDisplayed } from 'plugins/ml/jobs/new_job/simple/components/utils/adjust_interval'; @@ -48,6 +49,7 @@ import { timefilter } from 'ui/timefilter'; uiRoutes .when('/jobs/new_job/simple/single_metric', { template, + k7Breadcrumbs: getCreateSingleMetricJobBreadcrumbs, resolve: { CheckLicense: checkLicenseExpired, privileges: checkCreateJobsPrivilege, diff --git a/x-pack/plugins/ml/public/jobs/new_job/wizard/steps/index_or_search/index_or_search_controller.js b/x-pack/plugins/ml/public/jobs/new_job/wizard/steps/index_or_search/index_or_search_controller.js index a3c3583e7d3d..50004a351c8d 100644 --- a/x-pack/plugins/ml/public/jobs/new_job/wizard/steps/index_or_search/index_or_search_controller.js +++ b/x-pack/plugins/ml/public/jobs/new_job/wizard/steps/index_or_search/index_or_search_controller.js @@ -13,6 +13,7 @@ import uiRoutes from 'ui/routes'; import { checkLicenseExpired, checkBasicLicense } from 'plugins/ml/license/check_license'; +import { getCreateJobBreadcrumbs, getDataVisualizerIndexOrSearchBreadcrumbs } from 'plugins/ml/jobs/breadcrumbs'; import { preConfiguredJobRedirect } from 'plugins/ml/jobs/new_job/wizard/preconfigured_job_redirect'; import { checkCreateJobsPrivilege, checkFindFileStructurePrivilege } from 'plugins/ml/privilege/check_privilege'; import { loadIndexPatterns, getIndexPatterns } from 'plugins/ml/util/index_utils'; @@ -29,6 +30,7 @@ uiRoutes uiRoutes .when('/jobs/new_job/step/index_or_search', { template, + k7Breadcrumbs: getCreateJobBreadcrumbs, resolve: { CheckLicense: checkLicenseExpired, privileges: checkCreateJobsPrivilege, @@ -43,6 +45,7 @@ uiRoutes uiRoutes .when('/datavisualizer_index_select', { template, + k7Breadcrumbs: getDataVisualizerIndexOrSearchBreadcrumbs, resolve: { CheckLicense: checkBasicLicense, privileges: checkFindFileStructurePrivilege, diff --git a/x-pack/plugins/ml/public/jobs/new_job/wizard/steps/job_type/job_type_controller.js b/x-pack/plugins/ml/public/jobs/new_job/wizard/steps/job_type/job_type_controller.js index 87b0f266af4a..df62094fe5c9 100644 --- a/x-pack/plugins/ml/public/jobs/new_job/wizard/steps/job_type/job_type_controller.js +++ b/x-pack/plugins/ml/public/jobs/new_job/wizard/steps/job_type/job_type_controller.js @@ -14,6 +14,7 @@ import uiRoutes from 'ui/routes'; import { checkLicenseExpired } from 'plugins/ml/license/check_license'; import { checkCreateJobsPrivilege } from 'plugins/ml/privilege/check_privilege'; +import { getCreateJobBreadcrumbs } from 'plugins/ml/jobs/breadcrumbs'; import { SearchItemsProvider } from 'plugins/ml/jobs/new_job/utils/new_job_utils'; import { loadCurrentIndexPattern, loadCurrentSavedSearch, timeBasedIndexCheck } from 'plugins/ml/util/index_utils'; import { addItemToRecentlyAccessed } from 'plugins/ml/util/recently_accessed'; @@ -25,6 +26,7 @@ import { timefilter } from 'ui/timefilter'; uiRoutes .when('/jobs/new_job/step/job_type', { template, + k7Breadcrumbs: getCreateJobBreadcrumbs, resolve: { CheckLicense: checkLicenseExpired, privileges: checkCreateJobsPrivilege, diff --git a/x-pack/plugins/ml/public/settings/breadcrumbs.js b/x-pack/plugins/ml/public/settings/breadcrumbs.js new file mode 100644 index 000000000000..2fa1a6e782f0 --- /dev/null +++ b/x-pack/plugins/ml/public/settings/breadcrumbs.js @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + + +import { ML_BREADCRUMB } from '../breadcrumbs'; + + +export function getSettingsBreadcrumbs() { + // Whilst top level nav menu with tabs remains, + // use root ML breadcrumb. + return [ + ML_BREADCRUMB + ]; +} + +export function getCalendarManagementBreadcrumbs() { + return [ + ...getSettingsBreadcrumbs(), + { + text: 'Calendar management', + href: '#/settings/calendars_list' + } + ]; +} + +export function getCreateCalendarBreadcrumbs() { + return [ + ...getCalendarManagementBreadcrumbs(), + { + text: 'Create', + href: '#/settings/calendars_list/new_calendar' + } + ]; +} + +export function getEditCalendarBreadcrumbs() { + return [ + ...getCalendarManagementBreadcrumbs(), + { + text: 'Edit', + href: '#/settings/calendars_list/edit_calendar' + } + ]; +} + +export function getFilterListsBreadcrumbs() { + return [ + ...getSettingsBreadcrumbs(), + { + text: 'Filter lists', + href: '#/settings/filter_lists' + } + ]; +} + +export function getCreateFilterListBreadcrumbs() { + return [ + ...getFilterListsBreadcrumbs(), + { + text: 'Create', + href: '#/settings/filter_lists/new' + } + ]; +} + +export function getEditFilterListBreadcrumbs() { + return [ + ...getFilterListsBreadcrumbs(), + { + text: 'Edit', + href: '#/settings/filter_lists/edit' + } + ]; +} diff --git a/x-pack/plugins/ml/public/settings/filter_lists/edit/directive.js b/x-pack/plugins/ml/public/settings/filter_lists/edit/directive.js index a72eae02c0ab..a8bc48010e84 100644 --- a/x-pack/plugins/ml/public/settings/filter_lists/edit/directive.js +++ b/x-pack/plugins/ml/public/settings/filter_lists/edit/directive.js @@ -12,6 +12,7 @@ import ReactDOM from 'react-dom'; import { uiModules } from 'ui/modules'; const module = uiModules.get('apps/ml', ['react']); +import { getCreateFilterListBreadcrumbs, getEditFilterListBreadcrumbs } from '../../breadcrumbs'; import { checkFullLicense } from 'plugins/ml/license/check_license'; import { checkGetJobsPrivilege } from 'plugins/ml/privilege/check_privilege'; import { getMlNodeCount } from 'plugins/ml/ml_nodes_check/check_ml_nodes'; @@ -29,6 +30,7 @@ const template = ` uiRoutes .when('/settings/filter_lists/new_filter_list', { template, + k7Breadcrumbs: getCreateFilterListBreadcrumbs, resolve: { CheckLicense: checkFullLicense, privileges: checkGetJobsPrivilege, @@ -38,6 +40,7 @@ uiRoutes }) .when('/settings/filter_lists/edit_filter_list/:filterId', { template, + k7Breadcrumbs: getEditFilterListBreadcrumbs, resolve: { CheckLicense: checkFullLicense, privileges: checkGetJobsPrivilege, diff --git a/x-pack/plugins/ml/public/settings/filter_lists/list/directive.js b/x-pack/plugins/ml/public/settings/filter_lists/list/directive.js index df54a65a5ccc..60de17ce8f7a 100644 --- a/x-pack/plugins/ml/public/settings/filter_lists/list/directive.js +++ b/x-pack/plugins/ml/public/settings/filter_lists/list/directive.js @@ -12,6 +12,7 @@ import ReactDOM from 'react-dom'; import { uiModules } from 'ui/modules'; const module = uiModules.get('apps/ml', ['react']); +import { getFilterListsBreadcrumbs } from '../../breadcrumbs'; import { checkFullLicense } from 'plugins/ml/license/check_license'; import { checkGetJobsPrivilege } from 'plugins/ml/privilege/check_privilege'; import { getMlNodeCount } from 'plugins/ml/ml_nodes_check/check_ml_nodes'; @@ -29,6 +30,7 @@ const template = ` uiRoutes .when('/settings/filter_lists', { template, + k7Breadcrumbs: getFilterListsBreadcrumbs, resolve: { CheckLicense: checkFullLicense, privileges: checkGetJobsPrivilege, diff --git a/x-pack/plugins/ml/public/settings/scheduled_events/calendars_list/calendars_list_controller.js b/x-pack/plugins/ml/public/settings/scheduled_events/calendars_list/calendars_list_controller.js index 03cb20d6255f..eff4f9843ab5 100644 --- a/x-pack/plugins/ml/public/settings/scheduled_events/calendars_list/calendars_list_controller.js +++ b/x-pack/plugins/ml/public/settings/scheduled_events/calendars_list/calendars_list_controller.js @@ -13,6 +13,7 @@ import 'ui/pager'; import 'ui/sortable_column'; import uiRoutes from 'ui/routes'; +import { getCalendarManagementBreadcrumbs } from '../../breadcrumbs'; import { checkFullLicense } from 'plugins/ml/license/check_license'; import { checkGetJobsPrivilege, checkPermission } from 'plugins/ml/privilege/check_privilege'; import { getMlNodeCount, mlNodesAvailable } from 'plugins/ml/ml_nodes_check/check_ml_nodes'; @@ -27,6 +28,7 @@ import { timefilter } from 'ui/timefilter'; uiRoutes .when('/settings/calendars_list', { template, + k7Breadcrumbs: getCalendarManagementBreadcrumbs, resolve: { CheckLicense: checkFullLicense, privileges: checkGetJobsPrivilege, diff --git a/x-pack/plugins/ml/public/settings/scheduled_events/new_calendar/create_calendar_controller.js b/x-pack/plugins/ml/public/settings/scheduled_events/new_calendar/create_calendar_controller.js index 55f4e813c7bb..7a6e363aa190 100644 --- a/x-pack/plugins/ml/public/settings/scheduled_events/new_calendar/create_calendar_controller.js +++ b/x-pack/plugins/ml/public/settings/scheduled_events/new_calendar/create_calendar_controller.js @@ -15,6 +15,7 @@ import 'plugins/ml/settings/scheduled_events/components/events_list'; import { validateCalendarId } from 'plugins/ml/settings/scheduled_events/components/utils/validate_calendar'; import uiRoutes from 'ui/routes'; +import { getCreateCalendarBreadcrumbs, getEditCalendarBreadcrumbs } from '../../breadcrumbs'; import { checkFullLicense } from 'plugins/ml/license/check_license'; import { checkGetJobsPrivilege } from 'plugins/ml/privilege/check_privilege'; import { checkMlNodesAvailable } from 'plugins/ml/ml_nodes_check/check_ml_nodes'; @@ -29,6 +30,7 @@ import template from './create_calendar.html'; uiRoutes .when('/settings/calendars_list/new_calendar', { template, + k7Breadcrumbs: getCreateCalendarBreadcrumbs, resolve: { CheckLicense: checkFullLicense, privileges: checkGetJobsPrivilege, @@ -38,6 +40,7 @@ uiRoutes }) .when('/settings/calendars_list/edit_calendar/:calendarId', { template, + k7Breadcrumbs: getEditCalendarBreadcrumbs, resolve: { CheckLicense: checkFullLicense, privileges: checkGetJobsPrivilege, diff --git a/x-pack/plugins/ml/public/settings/settings_controller.js b/x-pack/plugins/ml/public/settings/settings_controller.js index b4c0e123ef1e..174efc934e92 100644 --- a/x-pack/plugins/ml/public/settings/settings_controller.js +++ b/x-pack/plugins/ml/public/settings/settings_controller.js @@ -7,6 +7,7 @@ import uiRoutes from 'ui/routes'; +import { getSettingsBreadcrumbs } from './breadcrumbs'; import { checkFullLicense } from 'plugins/ml/license/check_license'; import { checkGetJobsPrivilege, checkPermission } from 'plugins/ml/privilege/check_privilege'; import { getMlNodeCount } from 'plugins/ml/ml_nodes_check/check_ml_nodes'; @@ -19,6 +20,7 @@ import { timefilter } from 'ui/timefilter'; uiRoutes .when('/settings', { template, + k7Breadcrumbs: getSettingsBreadcrumbs, resolve: { CheckLicense: checkFullLicense, privileges: checkGetJobsPrivilege, diff --git a/x-pack/plugins/ml/public/timeseriesexplorer/breadcrumbs.js b/x-pack/plugins/ml/public/timeseriesexplorer/breadcrumbs.js new file mode 100644 index 000000000000..e0e5e5d1431a --- /dev/null +++ b/x-pack/plugins/ml/public/timeseriesexplorer/breadcrumbs.js @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + + +import { ML_BREADCRUMB } from '../breadcrumbs'; + + +export function getSingleMetricViewerBreadcrumbs() { + // Whilst top level nav menu with tabs remains, + // use root ML breadcrumb. + return [ + ML_BREADCRUMB + ]; +} + diff --git a/x-pack/plugins/ml/public/timeseriesexplorer/timeseriesexplorer_controller.js b/x-pack/plugins/ml/public/timeseriesexplorer/timeseriesexplorer_controller.js index 44b7d59fe504..c47a931d87a0 100644 --- a/x-pack/plugins/ml/public/timeseriesexplorer/timeseriesexplorer_controller.js +++ b/x-pack/plugins/ml/public/timeseriesexplorer/timeseriesexplorer_controller.js @@ -30,6 +30,7 @@ import { isModelPlotEnabled, mlFunctionToESAggregation } from 'plugins/ml/../common/util/job_utils'; import { loadIndexPatterns, getIndexPatterns } from 'plugins/ml/util/index_utils'; +import { getSingleMetricViewerBreadcrumbs } from './breadcrumbs'; import { createTimeSeriesJobData, processForecastResults, @@ -53,6 +54,7 @@ import { initPromise } from 'plugins/ml/util/promise'; uiRoutes .when('/timeseriesexplorer/?', { template, + k7Breadcrumbs: getSingleMetricViewerBreadcrumbs, resolve: { CheckLicense: checkFullLicense, privileges: checkGetJobsPrivilege,