Skip to content

Commit

Permalink
Import autocomplete provider from new platform.
Browse files Browse the repository at this point in the history
  • Loading branch information
justinkambic committed Sep 30, 2019
1 parent bb33f37 commit a9c696d
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 17 deletions.
12 changes: 10 additions & 2 deletions x-pack/legacy/plugins/uptime/public/apps/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,16 @@ export class Plugin {
this.chrome = chrome;
}

public start({ core }: StartObject): void {
const libs: UMFrontendLibs = { framework: getKibanaFrameworkAdapter(core) };
public start(start: StartObject): void {
const {
core,
plugins: {
data: { autocomplete },
},
} = start;
const libs: UMFrontendLibs = {
framework: getKibanaFrameworkAdapter(core, autocomplete),
};
// @ts-ignore improper type description
this.chrome.setRootTemplate(template);
const checkForRoot = () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,17 @@

import React, { useState, useEffect, useContext } from 'react';
import { uniqueId, startsWith } from 'lodash';
import { npStart } from 'ui/new_platform';
import { EuiCallOut } from '@elastic/eui';
import styled from 'styled-components';
import { FormattedMessage } from '@kbn/i18n/react';
import { StaticIndexPattern } from 'ui/index_patterns';
import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query';
import { AutocompleteProviderRegister, AutocompleteSuggestion } from 'src/plugins/data/public';
import { StaticIndexPattern } from 'src/legacy/core_plugins/data/public/index_patterns/index_patterns';
import { Typeahead } from './typeahead';
import { getIndexPattern } from '../../../lib/adapters/index_pattern';
import { UptimeSettingsContext } from '../../../contexts';
import { useUrlParams } from '../../../hooks';
import { toStaticIndexPattern } from '../../../lib/helper';
import { AutocompleteSuggestion } from '../../../../../../../../src/plugins/data/public';

const Container = styled.div`
margin-bottom: 10px;
Expand All @@ -28,20 +27,18 @@ interface State {
isLoadingIndexPattern: boolean;
}

const getAutocompleteProvider = (language: string) =>
npStart.plugins.data.autocomplete.getProvider(language);

function convertKueryToEsQuery(kuery: string, indexPattern: StaticIndexPattern) {
function convertKueryToEsQuery(kuery: string, indexPattern: unknown) {
const ast = fromKueryExpression(kuery);
return toElasticsearchQuery(ast, indexPattern);
}

function getSuggestions(
query: string,
selectionStart: number,
apmIndexPattern: StaticIndexPattern
apmIndexPattern: StaticIndexPattern,
autocomplete: Pick<AutocompleteProviderRegister, 'getProvider'>
) {
const autocompleteProvider = getAutocompleteProvider('kuery');
const autocompleteProvider = autocomplete.getProvider('kuery');
if (!autocompleteProvider) {
return [];
}
Expand All @@ -62,7 +59,11 @@ function getSuggestions(
return suggestions;
}

export function KueryBar() {
interface Props {
autocomplete: Pick<AutocompleteProviderRegister, 'getProvider'>;
}

export function KueryBar({ autocomplete }: Props) {
const [state, setState] = useState<State>({
suggestions: [],
isLoadingIndexPattern: true,
Expand Down Expand Up @@ -94,7 +95,12 @@ export function KueryBar() {
currentRequestCheck = currentRequest;

try {
let suggestions = await getSuggestions(inputValue, selectionStart, indexPattern);
let suggestions = await getSuggestions(
inputValue,
selectionStart,
indexPattern,
autocomplete
);
suggestions = suggestions
.filter((suggestion: AutocompleteSuggestion) => !startsWith(suggestion.text, 'span.'))
.slice(0, 15);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { ChromeBreadcrumb, CoreStart } from 'src/core/public';
import React from 'react';
import ReactDOM from 'react-dom';
import { get } from 'lodash';
import { AutocompleteProviderRegister } from 'src/plugins/data/public';
import { CreateGraphQLClient } from './framework_adapter_types';
import { UptimeApp, UptimeAppProps } from '../../../uptime_app';
import { getIntegratedAppAvailability } from './capabilities_adapter';
Expand All @@ -17,7 +18,10 @@ import { renderUptimeKibanaGlobalHelp } from './kibana_global_help';
import { UMFrameworkAdapter, BootstrapUptimeApp } from '../../lib';
import { createApolloClient } from './apollo_client_adapter';

export const getKibanaFrameworkAdapter = (core: CoreStart): UMFrameworkAdapter => {
export const getKibanaFrameworkAdapter = (
core: CoreStart,
autocomplete: Pick<AutocompleteProviderRegister, 'getProvider'>
): UMFrameworkAdapter => {
const {
application: { capabilities },
chrome: { setBadge, setHelpExtension },
Expand All @@ -39,6 +43,7 @@ export const getKibanaFrameworkAdapter = (core: CoreStart): UMFrameworkAdapter =
canSave,
client: createApolloClient(`${basePath.get()}/api/uptime/graphql`, 'true'),
darkMode: core.uiSettings.get('theme:darkMode'),
autocomplete,
i18n,
isApmAvailable: apm,
isInfraAvailable: infrastructure,
Expand Down
13 changes: 10 additions & 3 deletions x-pack/legacy/plugins/uptime/public/pages/overview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { i18n } from '@kbn/i18n';
import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query';
import React, { Fragment, useContext, useEffect, useState } from 'react';
import styled from 'styled-components';
import { AutocompleteProviderRegister } from 'src/plugins/data/public';
import { getOverviewPageBreadcrumbs } from '../breadcrumbs';
import {
EmptyState,
Expand All @@ -29,12 +30,13 @@ import { combineFiltersAndUserSearch, stringifyKueries, toStaticIndexPattern } f

interface OverviewPageProps {
basePath: string;
logOverviewPageLoad: () => void;
autocomplete: Pick<AutocompleteProviderRegister, 'getProvider'>;
history: any;
location: {
pathname: string;
search: string;
};
logOverviewPageLoad: () => void;
setBreadcrumbs: UMUpdateBreadcrumbs;
}

Expand All @@ -54,7 +56,12 @@ const EuiFlexItemStyled = styled(EuiFlexItem)`
}
`;

export const OverviewPage = ({ basePath, logOverviewPageLoad, setBreadcrumbs }: Props) => {
export const OverviewPage = ({
basePath,
autocomplete,
logOverviewPageLoad,
setBreadcrumbs,
}: Props) => {
const { colors, setHeadingText } = useContext(UptimeSettingsContext);
const [getUrlParams, updateUrl] = useUrlParams();
const { absoluteDateRangeStart, absoluteDateRangeEnd, ...params } = getUrlParams();
Expand Down Expand Up @@ -129,7 +136,7 @@ export const OverviewPage = ({ basePath, logOverviewPageLoad, setBreadcrumbs }:
<EmptyState basePath={basePath} implementsCustomErrorState={true} variables={{}}>
<EuiFlexGroup gutterSize="xs" wrap responsive>
<EuiFlexItem grow={1} style={{ flexBasis: 500 }}>
<KueryBar />
<KueryBar autocomplete={autocomplete} />
</EuiFlexItem>
<EuiFlexItemStyled grow={true}>
<FilterGroup
Expand Down
4 changes: 4 additions & 0 deletions x-pack/legacy/plugins/uptime/public/uptime_app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { ApolloProvider } from 'react-apollo';
import { Provider as ReduxProvider } from 'react-redux';
import { BrowserRouter as Router, Route, RouteComponentProps, Switch } from 'react-router-dom';
import { I18nStart, ChromeBreadcrumb } from 'src/core/public';
import { AutocompleteProviderRegister } from 'src/plugins/data/public';
import { UMGraphQLClient, UMUpdateBreadcrumbs, UMUpdateBadge } from './lib/lib';
import { MonitorPage, OverviewPage, NotFoundPage } from './pages';
import { UptimeRefreshContext, UptimeSettingsContext, UMSettingsContextValues } from './contexts';
Expand All @@ -35,6 +36,7 @@ export interface UptimeAppProps {
canSave: boolean;
client: UMGraphQLClient;
darkMode: boolean;
autocomplete: Pick<AutocompleteProviderRegister, 'getProvider'>;
i18n: I18nStart;
isApmAvailable: boolean;
isInfraAvailable: boolean;
Expand All @@ -54,6 +56,7 @@ const Application = (props: UptimeAppProps) => {
canSave,
client,
darkMode,
autocomplete,
i18n: i18nCore,
isApmAvailable,
isInfraAvailable,
Expand Down Expand Up @@ -175,6 +178,7 @@ const Application = (props: UptimeAppProps) => {
render={routerProps => (
<OverviewPage
basePath={basePath}
autocomplete={autocomplete}
logOverviewPageLoad={logOverviewPageLoad}
setBreadcrumbs={setBreadcrumbs}
{...routerProps}
Expand Down

0 comments on commit a9c696d

Please sign in to comment.