Skip to content

Commit

Permalink
Added breadcrumb support for profiles
Browse files Browse the repository at this point in the history
  • Loading branch information
davismcphee committed May 9, 2023
1 parent 3396b4a commit d1580f6
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,14 @@ export const ContextApp = ({ dataView, anchorId, referrer }: ContextAppProps) =>

useEffect(() => {
services.chrome.setBreadcrumbs([
...getRootBreadcrumbs(referrer),
...getRootBreadcrumbs({ breadcrumb: referrer, services }),
{
text: i18n.translate('discover.context.breadcrumb', {
defaultMessage: 'Surrounding documents',
}),
},
]);
}, [locator, referrer, services.chrome]);
}, [locator, referrer, services]);

useExecutionContext(core.executionContext, {
type: 'application',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ export interface DocProps {
export function Doc(props: DocProps) {
const { dataView } = props;
const [reqState, hit] = useEsDocSearch(props);
const { locator, chrome, docLinks } = useDiscoverServices();
const services = useDiscoverServices();
const { locator, chrome, docLinks } = services;
const indexExistsLink = docLinks.links.apis.indexExists;

const singleDocTitle = useRef<HTMLHeadingElement>(null);
Expand All @@ -53,10 +54,10 @@ export function Doc(props: DocProps) {

useEffect(() => {
chrome.setBreadcrumbs([
...getRootBreadcrumbs(props.referrer),
...getRootBreadcrumbs({ breadcrumb: props.referrer, services }),
{ text: `${props.index}#${props.id}` },
]);
}, [chrome, props.referrer, props.index, props.id, dataView, locator]);
}, [chrome, props.referrer, props.index, props.id, dataView, locator, services]);

return (
<EuiPage>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ export function DiscoverMainApp(props: DiscoverMainProps) {
useEffect(() => {
const pageTitleSuffix = savedSearch.id && savedSearch.title ? `: ${savedSearch.title}` : '';
chrome.docTitle.change(`Discover${pageTitleSuffix}`);
setBreadcrumbsTitle(savedSearch.title, chrome);
}, [savedSearch.id, savedSearch.title, chrome, data]);
setBreadcrumbsTitle({ title: savedSearch.title, services });
}, [savedSearch.id, savedSearch.title, chrome, data, services]);

useEffect(() => {
addHelpMenuToAppChrome(chrome, docLinks);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,8 @@ export function DiscoverMainRoute({ registerExtensions, isDev }: MainRouteProps)

chrome.setBreadcrumbs(
currentSavedSearch && currentSavedSearch.title
? getSavedSearchBreadcrumbs(currentSavedSearch.title)
: getRootBreadcrumbs()
? getSavedSearchBreadcrumbs({ id: currentSavedSearch.title, services })
: getRootBreadcrumbs({ services })
);

setLoading(false);
Expand Down Expand Up @@ -186,6 +186,7 @@ export function DiscoverMainRoute({ registerExtensions, isDev }: MainRouteProps)
savedSearchId,
historyLocationState?.dataViewSpec,
chrome,
services,
history,
core.application.navigateToApp,
core.theme,
Expand Down
45 changes: 36 additions & 9 deletions src/plugins/discover/public/utils/breadcrumbs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,44 @@
* Side Public License, v 1.
*/

import { ChromeStart } from '@kbn/core/public';
import { i18n } from '@kbn/i18n';
import { matchPath } from 'react-router-dom';
import type { DiscoverServices } from '../build_services';

export function getRootBreadcrumbs(breadcrumb?: string) {
const getRootPath = ({ history }: DiscoverServices) => {
const match = matchPath<{ profile?: string }>(history().location.pathname, {
path: '/p/:profile',
});

return match ? `#/p/${match.params.profile}/` : '#/';
};

export function getRootBreadcrumbs({
breadcrumb,
services,
}: {
breadcrumb?: string;
services: DiscoverServices;
}) {
return [
{
text: i18n.translate('discover.rootBreadcrumb', {
defaultMessage: 'Discover',
}),
href: breadcrumb || '#/',
href: breadcrumb || getRootPath(services),
},
];
}

export function getSavedSearchBreadcrumbs(id: string) {
export function getSavedSearchBreadcrumbs({
id,
services,
}: {
id: string;
services: DiscoverServices;
}) {
return [
...getRootBreadcrumbs(),
...getRootBreadcrumbs({ services }),
{
text: id,
},
Expand All @@ -33,21 +54,27 @@ export function getSavedSearchBreadcrumbs(id: string) {
* Helper function to set the Discover's breadcrumb
* if there's an active savedSearch, its title is appended
*/
export function setBreadcrumbsTitle(title: string | undefined, chrome: ChromeStart) {
export function setBreadcrumbsTitle({
title,
services,
}: {
title: string | undefined;
services: DiscoverServices;
}) {
const discoverBreadcrumbsTitle = i18n.translate('discover.discoverBreadcrumbTitle', {
defaultMessage: 'Discover',
});

if (title) {
chrome.setBreadcrumbs([
services.chrome.setBreadcrumbs([
{
text: discoverBreadcrumbsTitle,
href: '#/',
href: getRootPath(services),
},
{ text: title },
]);
} else {
chrome.setBreadcrumbs([
services.chrome.setBreadcrumbs([
{
text: discoverBreadcrumbsTitle,
},
Expand Down

0 comments on commit d1580f6

Please sign in to comment.