kibana/x-pack/plugins/global_search/common/utils.ts
Pierre Gayvallet 29c0acfb2f
Add globalSearch x-pack plugin (#66293) (#68259)
* add skeleton for global_search plugin

* base implementation of the server-side service

* add utils tests

* add server-side mocks

* move take_in_array to common folder

* implements base of client-side plugin

* add tests for server-side service

* fix server plugin tests

* implement `navigateToUrl` core API

* extract processResults for the client-side

* fetch server results from the client side

* factorize process_results

* fix plugin start params

* move things around

* move all server types to single file

* fix types imports

* add basic FTR tests

* add client-side service tests

* add tests for addNavigate

* add getDefaultPreference & tests

* use optional for RequestHandlerContext

* add registerRoutes test

* add base test for context

* resolve TODO

* common nits/doc

* common nits/doc on public

* update CODEOWNERS

* add import for declare statement

* add license check on the server-side

* add license check on the client-side

* eslint

* address some review comments

* use properly typed errors for obs

* add integration tests for the find endpoint

* fix unit tests

* use licensing start contract

* translate the error message

* fix eslint rule for test_utils

* fix test_utils imports

* remove NavigableGlobalSearchResult, use `application.navigateToUrl` instead.

* use coreProvider plugin in FTR tests

* nits

* fix service start params

* fix service start params, bis

* I really need to fix this typecheck oom error

* add README, update missing jsdoc

* nits on doc
# Conflicts:
#	.github/CODEOWNERS
#	rfcs/text/0011_global_search.md
2020-06-04 19:12:06 +02:00

35 lines
1.1 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;
* you may not use this file except in compliance with the Elastic License.
*/
import { GlobalSearchProviderResultUrl } from './types';
// interface matching both the server and client-side implementation of IBasePath for our needs
// used to avoid duplicating `convertResultUrl` in server and client code due to different signatures.
export interface IBasePath {
prepend(path: string): string;
}
/**
* Convert a {@link GlobalSearchProviderResultUrl | provider result's url} to an absolute or relative url
* usable in {@link GlobalSearchResult | service results}
*/
export const convertResultUrl = (
url: GlobalSearchProviderResultUrl,
basePath: IBasePath
): string => {
if (typeof url === 'string') {
// relative path
if (url.startsWith('/')) {
return basePath.prepend(url);
}
// absolute url
return url;
}
if (url.prependBasePath) {
return basePath.prepend(url.path);
}
return url.path;
};