mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
185 lines
4.8 KiB
TypeScript
185 lines
4.8 KiB
TypeScript
/*
|
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
* or more contributor license agreements. Licensed under the Elastic License
|
|
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
* 2.0.
|
|
*/
|
|
|
|
import { i18n } from '@kbn/i18n';
|
|
import type { ChromeBreadcrumb } from 'src/core/public';
|
|
|
|
import { BASE_PATH } from '../../../common/constants';
|
|
import type { Page, DynamicPagePathValues } from '../page_paths';
|
|
import { pagePathGetters } from '../page_paths';
|
|
|
|
import { useKibana } from '../lib/kibana';
|
|
|
|
const BASE_BREADCRUMB: ChromeBreadcrumb = {
|
|
href: pagePathGetters.overview(),
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.appTitle', {
|
|
defaultMessage: 'Osquery',
|
|
}),
|
|
};
|
|
|
|
const breadcrumbGetters: {
|
|
[key in Page]?: (values: DynamicPagePathValues) => ChromeBreadcrumb[];
|
|
} = {
|
|
base: () => [BASE_BREADCRUMB],
|
|
overview: () => [
|
|
BASE_BREADCRUMB,
|
|
{
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.overviewPageTitle', {
|
|
defaultMessage: 'Overview',
|
|
}),
|
|
},
|
|
],
|
|
live_queries: () => [
|
|
BASE_BREADCRUMB,
|
|
{
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.liveQueriesPageTitle', {
|
|
defaultMessage: 'Live queries',
|
|
}),
|
|
},
|
|
],
|
|
live_query_new: () => [
|
|
BASE_BREADCRUMB,
|
|
{
|
|
href: pagePathGetters.live_queries(),
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.liveQueriesPageTitle', {
|
|
defaultMessage: 'Live queries',
|
|
}),
|
|
},
|
|
{
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.newLiveQueryPageTitle', {
|
|
defaultMessage: 'New',
|
|
}),
|
|
},
|
|
],
|
|
live_query_details: ({ liveQueryId }) => [
|
|
BASE_BREADCRUMB,
|
|
{
|
|
href: pagePathGetters.live_queries(),
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.liveQueriesPageTitle', {
|
|
defaultMessage: 'Live queries',
|
|
}),
|
|
},
|
|
{
|
|
text: liveQueryId,
|
|
},
|
|
],
|
|
saved_queries: () => [
|
|
BASE_BREADCRUMB,
|
|
{
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.savedQueriesPageTitle', {
|
|
defaultMessage: 'Saved queries',
|
|
}),
|
|
},
|
|
],
|
|
saved_query_new: () => [
|
|
BASE_BREADCRUMB,
|
|
{
|
|
href: pagePathGetters.saved_queries(),
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.savedQueriesPageTitle', {
|
|
defaultMessage: 'Saved queries',
|
|
}),
|
|
},
|
|
{
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.newSavedQueryPageTitle', {
|
|
defaultMessage: 'New',
|
|
}),
|
|
},
|
|
],
|
|
saved_query_edit: ({ savedQueryName }) => [
|
|
BASE_BREADCRUMB,
|
|
{
|
|
href: pagePathGetters.saved_queries(),
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.savedQueriesPageTitle', {
|
|
defaultMessage: 'Saved queries',
|
|
}),
|
|
},
|
|
{
|
|
text: savedQueryName,
|
|
},
|
|
],
|
|
packs: () => [
|
|
BASE_BREADCRUMB,
|
|
{
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.packsPageTitle', {
|
|
defaultMessage: 'Packs',
|
|
}),
|
|
},
|
|
],
|
|
pack_add: () => [
|
|
BASE_BREADCRUMB,
|
|
{
|
|
href: pagePathGetters.packs(),
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.packsPageTitle', {
|
|
defaultMessage: 'Packs',
|
|
}),
|
|
},
|
|
{
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.addpacksPageTitle', {
|
|
defaultMessage: 'Add',
|
|
}),
|
|
},
|
|
],
|
|
pack_details: ({ packName }) => [
|
|
BASE_BREADCRUMB,
|
|
{
|
|
href: pagePathGetters.packs(),
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.packsPageTitle', {
|
|
defaultMessage: 'Packs',
|
|
}),
|
|
},
|
|
{
|
|
text: packName,
|
|
},
|
|
],
|
|
pack_edit: ({ packName, packId }) => [
|
|
BASE_BREADCRUMB,
|
|
{
|
|
href: pagePathGetters.packs(),
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.packsPageTitle', {
|
|
defaultMessage: 'Packs',
|
|
}),
|
|
},
|
|
{
|
|
href: pagePathGetters.pack_details({ packId }),
|
|
text: packName,
|
|
},
|
|
{
|
|
text: i18n.translate('xpack.osquery.breadcrumbs.editpacksPageTitle', {
|
|
defaultMessage: 'Edit',
|
|
}),
|
|
},
|
|
],
|
|
};
|
|
|
|
export function useBreadcrumbs(page: Page, values: DynamicPagePathValues = {}) {
|
|
const { chrome, http, application } = useKibana().services;
|
|
|
|
const breadcrumbs: ChromeBreadcrumb[] =
|
|
breadcrumbGetters[page]?.(values).map((breadcrumb) => {
|
|
const href = breadcrumb.href
|
|
? http.basePath.prepend(`${BASE_PATH}${breadcrumb.href}`)
|
|
: undefined;
|
|
return {
|
|
...breadcrumb,
|
|
href,
|
|
onClick: href
|
|
? (ev: React.MouseEvent) => {
|
|
if (ev.metaKey || ev.altKey || ev.ctrlKey || ev.shiftKey) {
|
|
return;
|
|
}
|
|
ev.preventDefault();
|
|
application.navigateToUrl(href);
|
|
}
|
|
: undefined,
|
|
};
|
|
}) || [];
|
|
const docTitle: string[] = [...breadcrumbs]
|
|
.reverse()
|
|
.map((breadcrumb) => breadcrumb.text as string);
|
|
chrome.docTitle.change(docTitle);
|
|
chrome.setBreadcrumbs(breadcrumbs);
|
|
}
|