Move saved queries service + language switcher ⇒ NP (#51812)

* Move saved queries service + language switcher to NP

* test fixes

* test fix

* fix ts

* mock search service
This commit is contained in:
Liza Katz 2019-11-28 11:22:29 +02:00 committed by GitHub
parent 85d438cb03
commit bbd517b3ca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
39 changed files with 131 additions and 120 deletions

View file

@ -20,7 +20,7 @@
import { resolve } from 'path';
import { Legacy } from '../../../../kibana';
import { mappings } from './mappings';
import { SavedQuery } from './public';
import { SavedQuery } from '../../../plugins/data/public';
// eslint-disable-next-line import/no-default-export
export default function DataPlugin(kibana: any) {

View file

@ -38,7 +38,12 @@ export {
StaticIndexPattern,
} from './index_patterns';
export { QueryStringInput } from './query';
export { SearchBar, SearchBarProps, SavedQueryAttributes, SavedQuery } from './search';
export { SearchBar, SearchBarProps } from './search';
export {
SavedQueryAttributes,
SavedQuery,
SavedQueryTimeFilter,
} from '../../../../plugins/data/public';
/** @public static code */
export * from '../common';

View file

@ -18,7 +18,7 @@
*/
import { CoreSetup, CoreStart, Plugin } from 'kibana/public';
import { SearchService, SearchStart, createSearchBar, StatetfulSearchBarProps } from './search';
import { createSearchBar, StatetfulSearchBarProps } from './search';
import { IndexPatternsService, IndexPatternsSetup, IndexPatternsStart } from './index_patterns';
import { Storage, IStorageWrapper } from '../../../../../src/plugins/kibana_utils/public';
import { DataPublicPluginStart } from '../../../../plugins/data/public';
@ -51,7 +51,6 @@ export interface DataSetup {
*/
export interface DataStart {
indexPatterns: IndexPatternsStart;
search: SearchStart;
ui: {
SearchBar: React.ComponentType<StatetfulSearchBarProps>;
};
@ -71,7 +70,6 @@ export interface DataStart {
export class DataPlugin implements Plugin<DataSetup, DataStart, {}, DataPluginStartDependencies> {
private readonly indexPatterns: IndexPatternsService = new IndexPatternsService();
private readonly search: SearchService = new SearchService();
private setupApi!: DataSetup;
private storage!: IStorageWrapper;
@ -119,7 +117,6 @@ export class DataPlugin implements Plugin<DataSetup, DataStart, {}, DataPluginSt
return {
...this.setupApi!,
indexPatterns: indexPatternsService,
search: this.search.start(savedObjects.client),
ui: {
SearchBar,
},
@ -128,6 +125,5 @@ export class DataPlugin implements Plugin<DataSetup, DataStart, {}, DataPluginSt
public stop() {
this.indexPatterns.stop();
this.search.stop();
}
}

View file

@ -25,7 +25,7 @@ import {
import { EuiFieldText } from '@elastic/eui';
import React from 'react';
import { QueryLanguageSwitcher } from './language_switcher';
import { QueryLanguageSwitcher } from '../../../../../../../plugins/data/public';
import { QueryStringInput, QueryStringInputUI } from './query_string_input';
import { coreMock } from '../../../../../../../core/public/mocks';
const startMock = coreMock.createStart();

View file

@ -46,13 +46,13 @@ import {
matchPairs,
getQueryLog,
Query,
QueryLanguageSwitcher,
} from '../../../../../../../plugins/data/public';
import {
withKibana,
KibanaReactContextValue,
toMountPoint,
} from '../../../../../../../plugins/kibana_react/public';
import { QueryLanguageSwitcher } from './language_switcher';
import { fetchIndexPatterns } from './fetch_index_patterns';
interface Props {

View file

@ -17,5 +17,4 @@
* under the License.
*/
export * from './search_service';
export * from './search_bar';

View file

@ -35,8 +35,11 @@ import {
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { sortBy, isEqual } from 'lodash';
import { SavedQuery, SavedQueryAttributes } from '../../index';
import { SavedQueryService } from '../../lib/saved_query_service';
import {
SavedQuery,
SavedQueryAttributes,
SavedQueryService,
} from '../../../../../../../../plugins/data/public';
interface Props {
savedQuery?: SavedQueryAttributes;

View file

@ -22,7 +22,7 @@ import { EuiListGroupItem, EuiConfirmModal, EuiOverlayMask, EuiIconTip } from '@
import React, { Fragment, useState } from 'react';
import classNames from 'classnames';
import { i18n } from '@kbn/i18n';
import { SavedQuery } from '../../index';
import { SavedQuery } from '../../../../../../../../plugins/data/public';
interface Props {
savedQuery: SavedQuery;

View file

@ -35,8 +35,7 @@ import {
import { i18n } from '@kbn/i18n';
import React, { FunctionComponent, useEffect, useState, Fragment } from 'react';
import { sortBy } from 'lodash';
import { SavedQuery } from '../../index';
import { SavedQueryService } from '../../lib/saved_query_service';
import { SavedQuery, SavedQueryService } from '../../../../../../../../plugins/data/public';
import { SavedQueryListItem } from './saved_query_list_item';
const perPage = 50;

View file

@ -38,6 +38,7 @@ const mockTimeHistory = {
jest.mock('../../../../../../../plugins/data/public', () => {
return {
FilterBar: () => <div className="filterBar" />,
createSavedQueryService: () => {},
};
});

View file

@ -26,11 +26,9 @@ import { get, isEqual } from 'lodash';
import { IndexPattern } from '../../../../../data/public';
import { QueryBarTopRow } from '../../../query';
import { SavedQuery, SavedQueryAttributes } from '../index';
import { SavedQueryMeta, SaveQueryForm } from './saved_query_management/save_query_form';
import { SavedQueryManagementComponent } from './saved_query_management/saved_query_management_component';
import { SavedQueryService } from '../lib/saved_query_service';
import { createSavedQueryService } from '../lib/saved_query_service';
import {
withKibana,
KibanaReactContextValue,
@ -42,6 +40,10 @@ import {
esFilters,
TimeHistoryContract,
FilterBar,
SavedQueryService,
createSavedQueryService,
SavedQuery,
SavedQueryAttributes,
} from '../../../../../../../plugins/data/public';
interface SearchBarInjectedDeps {

View file

@ -17,23 +17,4 @@
* under the License.
*/
import { RefreshInterval, TimeRange, Query, esFilters } from 'src/plugins/data/public';
export * from './components';
export type SavedQueryTimeFilter = TimeRange & {
refreshInterval: RefreshInterval;
};
export interface SavedQuery {
id: string;
attributes: SavedQueryAttributes;
}
export interface SavedQueryAttributes {
title: string;
description: string;
query: Query;
filters?: esFilters.Filter[];
timefilter?: SavedQueryTimeFilter;
}

View file

@ -67,7 +67,7 @@ export interface RenderDeps {
uiSettings: UiSettingsClientContract;
chrome: ChromeStart;
addBasePath: (path: string) => string;
savedQueryService: DataStart['search']['services']['savedQueryService'];
savedQueryService: NpDataStart['query']['savedQueries'];
embeddables: IEmbeddableStart;
localStorage: Storage;
share: SharePluginStart;

View file

@ -17,7 +17,7 @@
* under the License.
*/
import { StaticIndexPattern, SavedQuery } from 'plugins/data';
import { StaticIndexPattern } from 'plugins/data';
import moment from 'moment';
import { Subscription } from 'rxjs';
@ -31,7 +31,7 @@ import {
import { ViewMode } from '../../../embeddable_api/public/np_ready/public';
import { SavedObjectDashboard } from './saved_dashboard/saved_dashboard';
import { DashboardAppState, SavedDashboardPanel, ConfirmModalFn } from './types';
import { TimeRange, Query, esFilters } from '../../../../../../src/plugins/data/public';
import { TimeRange, Query, esFilters, SavedQuery } from '../../../../../../src/plugins/data/public';
import { DashboardAppController } from './dashboard_app_controller';
import { RenderDeps } from './application';

View file

@ -38,8 +38,8 @@ import {
SavedObjectFinder,
unhashUrl,
} from './legacy_imports';
import { FilterStateManager, IndexPattern, SavedQuery } from '../../../data/public';
import { Query } from '../../../../../plugins/data/public';
import { FilterStateManager, IndexPattern } from '../../../data/public';
import { Query, SavedQuery } from '../../../../../plugins/data/public';
import './dashboard_empty_screen_directive';

View file

@ -104,7 +104,7 @@ export class DashboardPlugin implements Plugin {
chrome: contextCore.chrome,
addBasePath: contextCore.http.basePath.prepend,
uiSettings: contextCore.uiSettings,
savedQueryService: dataStart.search.services.savedQueryService,
savedQueryService: npDataStart.query.savedQueries,
embeddables,
dashboardCapabilities: contextCore.application.capabilities.dashboard,
localStorage: new Storage(localStorage),

View file

@ -68,16 +68,17 @@ const {
share,
StateProvider,
timefilter,
npData,
toastNotifications,
uiModules,
uiRoutes,
} = getServices();
import { getRootBreadcrumbs, getSavedSearchBreadcrumbs } from '../breadcrumbs';
import { start as data } from '../../../../data/public/legacy';
import { generateFilters } from '../../../../../../plugins/data/public';
import { start as data } from '../../../../data/public/legacy';
const { savedQueryService } = data.search.services;
const savedQueryService = npData.query.savedQueries;
const fetchStatuses = {
UNINITIALIZED: 'uninitialized',

View file

@ -34,7 +34,6 @@ import { StateProvider } from 'ui/state_management/state';
import { SavedObjectProvider } from 'ui/saved_objects/saved_object';
import { SavedObjectRegistryProvider } from 'ui/saved_objects/saved_object_registry';
import { FilterBarQueryFilterProvider } from 'ui/filter_manager/query_filter';
import { timefilter } from 'ui/timefilter';
// @ts-ignore
import { IndexPattern, IndexPatterns } from 'ui/index_patterns';
import { wrapInI18nContext } from 'ui/i18n';
@ -58,7 +57,9 @@ const services = {
uiSettings: npStart.core.uiSettings,
uiActions: npStart.plugins.uiActions,
embeddable: npStart.plugins.embeddable,
npData: npStart.plugins.data,
share: npStart.plugins.share,
timefilter: npStart.plugins.data.query.timefilter.timefilter,
// legacy
docTitle,
docViewsRegistry,
@ -70,7 +71,6 @@ const services = {
SavedObjectProvider,
SearchSource,
StateProvider,
timefilter,
uiModules,
uiRoutes,
wrapInI18nContext,

View file

@ -54,19 +54,20 @@ const {
capabilities,
chrome,
chromeLegacy,
npData,
data,
docTitle,
FilterBarQueryFilterProvider,
getBasePath,
toastNotifications,
timefilter,
uiModules,
uiRoutes,
visualizations,
share,
} = getServices();
const { savedQueryService } = data.search.services;
const savedQueryService = npData.query.savedQueries;
const { timefilter } = npData.query.timefilter;
uiRoutes
.when(VisualizeConstants.CREATE_PATH, {

View file

@ -36,7 +36,6 @@ import { wrapInI18nContext } from 'ui/i18n';
// @ts-ignore
import { uiModules } from 'ui/modules';
import { FeatureCatalogueRegistryProvider } from 'ui/registry/feature_catalogue';
import { timefilter } from 'ui/timefilter';
// Saved objects
import { SavedObjectsClientProvider } from 'ui/saved_objects';
@ -46,8 +45,8 @@ import { SavedObjectRegistryProvider } from 'ui/saved_objects/saved_object_regis
import { createUiStatsReporter, METRIC_TYPE } from '../../../ui_metric/public';
import { start as visualizations } from '../../../visualizations/public/np_ready/public/legacy';
import { start as data } from '../../../data/public/legacy';
import { start as embeddables } from '../../../../core_plugins/embeddable_api/public/np_ready/public/legacy';
import { start as data } from '../../../data/public/legacy';
const services = {
// new platform
@ -63,6 +62,7 @@ const services = {
core: npStart.core,
share: npStart.plugins.share,
npData: npStart.plugins.data,
data,
embeddables,
visualizations,
@ -78,7 +78,7 @@ const services = {
SavedObjectProvider,
SavedObjectRegistryProvider,
SavedObjectsClientProvider,
timefilter,
timefilter: npStart.plugins.data.query.timefilter.timefilter,
uiModules,
uiRoutes,
wrapInI18nContext,

View file

@ -80,6 +80,14 @@ export const npSetup = {
timefilter: sinon.fake(),
history: sinon.fake(),
},
savedQueries: {
saveQuery: sinon.fake(),
getAllSavedQueries: sinon.fake(),
findSavedQueries: sinon.fake(),
getSavedQuery: sinon.fake(),
deleteSavedQuery: sinon.fake(),
getSavedQueryCount: sinon.fake(),
}
},
fieldFormats: getFieldFormatsRegistry(mockUiSettings),
},

View file

@ -59,7 +59,7 @@ export class DataPublicPlugin implements Plugin<DataPublicPluginSetup, DataPubli
getSuggestions: getSuggestionsProvider(core.uiSettings, core.http),
search: this.searchService.start(core),
fieldFormats: this.fieldFormatsService.start(),
query: this.queryService.start(),
query: this.queryService.start(core.savedObjects),
ui: {
IndexPatternSelect: createIndexPatternSelect(core.savedObjects.client),
},

View file

@ -21,7 +21,6 @@ export * from './lib';
export * from './query_service';
export * from './filter_manager';
export * from './timefilter';
export * from './saved_query';
export * from './persisted_log';

View file

@ -35,6 +35,7 @@ const createStartContractMock = () => {
const startContract = {
filterManager: jest.fn() as any,
timefilter: timefilterServiceMock.createStartContract(),
savedQueries: jest.fn() as any,
};
return startContract;

View file

@ -17,10 +17,11 @@
* under the License.
*/
import { UiSettingsClientContract } from 'src/core/public';
import { CoreStart } from 'src/core/public';
import { IStorageWrapper } from 'src/plugins/kibana_utils/public';
import { FilterManager } from './filter_manager';
import { TimefilterService, TimefilterSetup } from './timefilter';
import { createSavedQueryService } from './saved_query/saved_query_service';
/**
* Query Service
@ -29,9 +30,8 @@ import { TimefilterService, TimefilterSetup } from './timefilter';
export interface QueryServiceDependencies {
storage: IStorageWrapper;
uiSettings: UiSettingsClientContract;
uiSettings: CoreStart['uiSettings'];
}
export class QueryService {
filterManager!: FilterManager;
timefilter!: TimefilterSetup;
@ -51,10 +51,11 @@ export class QueryService {
};
}
public start() {
public start(savedObjects: CoreStart['savedObjects']) {
return {
filterManager: this.filterManager,
timefilter: this.timefilter,
savedQueries: createSavedQueryService(savedObjects.client),
};
}

View file

@ -17,30 +17,5 @@
* under the License.
*/
import { SavedObjectsClientContract } from 'src/core/public';
import { createSavedQueryService } from './search_bar/lib/saved_query_service';
/**
* Search Service
* @internal
*/
export class SearchService {
public setup() {
// Service requires index patterns, which are only available in `start`
}
public start(savedObjectsClient: SavedObjectsClientContract) {
return {
services: {
savedQueryService: createSavedQueryService(savedObjectsClient),
},
};
}
public stop() {}
}
/** @public */
export type SearchStart = ReturnType<SearchService['start']>;
export { SavedQuery, SavedQueryAttributes, SavedQueryService, SavedQueryTimeFilter } from './types';
export { createSavedQueryService } from './saved_query_service';

View file

@ -17,9 +17,8 @@
* under the License.
*/
import { SavedQueryAttributes } from '../index';
import { createSavedQueryService } from './saved_query_service';
import { esFilters } from '../../../../../../../plugins/data/public';
import { esFilters, SavedQueryAttributes } from '../..';
const savedQueryAttributes: SavedQueryAttributes = {
title: 'foo',

View file

@ -17,9 +17,8 @@
* under the License.
*/
import { SavedObjectAttributes } from 'src/core/server';
import { SavedObjectsClientContract } from 'src/core/public';
import { SavedQueryAttributes, SavedQuery } from '../index';
import { SavedObjectsClientContract, SavedObjectAttributes } from 'src/core/public';
import { SavedQueryAttributes, SavedQuery, SavedQueryService } from './types';
type SerializedSavedQueryAttributes = SavedObjectAttributes &
SavedQueryAttributes & {
@ -29,22 +28,6 @@ type SerializedSavedQueryAttributes = SavedObjectAttributes &
};
};
export interface SavedQueryService {
saveQuery: (
attributes: SavedQueryAttributes,
config?: { overwrite: boolean }
) => Promise<SavedQuery>;
getAllSavedQueries: () => Promise<SavedQuery[]>;
findSavedQueries: (
searchText?: string,
perPage?: number,
activePage?: number
) => Promise<SavedQuery[]>;
getSavedQuery: (id: string) => Promise<SavedQuery>;
deleteSavedQuery: (id: string) => Promise<{}>;
getSavedQueryCount: () => Promise<number>;
}
export const createSavedQueryService = (
savedObjectsClient: SavedObjectsClientContract
): SavedQueryService => {

View file

@ -0,0 +1,53 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { RefreshInterval, TimeRange, Query, esFilters } from '../..';
export type SavedQueryTimeFilter = TimeRange & {
refreshInterval: RefreshInterval;
};
export interface SavedQuery {
id: string;
attributes: SavedQueryAttributes;
}
export interface SavedQueryAttributes {
title: string;
description: string;
query: Query;
filters?: esFilters.Filter[];
timefilter?: SavedQueryTimeFilter;
}
export interface SavedQueryService {
saveQuery: (
attributes: SavedQueryAttributes,
config?: { overwrite: boolean }
) => Promise<SavedQuery>;
getAllSavedQueries: () => Promise<SavedQuery[]>;
findSavedQueries: (
searchText?: string,
perPage?: number,
activePage?: number
) => Promise<SavedQuery[]>;
getSavedQuery: (id: string) => Promise<SavedQuery>;
deleteSavedQuery: (id: string) => Promise<{}>;
getSavedQueryCount: () => Promise<number>;
}

View file

@ -21,3 +21,5 @@ export { SuggestionsComponent } from './typeahead/suggestions_component';
export { IndexPatternSelect } from './index_pattern_select';
export { FilterBar } from './filter_bar';
export { applyFiltersPopover } from './apply_filters';
// temp export
export { QueryLanguageSwitcher } from './query_string_input/language_switcher';

View file

@ -20,7 +20,7 @@
import React from 'react';
import { QueryLanguageSwitcher } from './language_switcher';
import { KibanaContextProvider } from 'src/plugins/kibana_react/public';
import { coreMock } from '../../../../../../../core/public/mocks';
import { coreMock } from '../../../../../core/public/mocks';
import { mountWithIntl } from 'test_utils/enzyme_helpers';
const startMock = coreMock.createStart();

View file

@ -31,7 +31,7 @@ import {
} from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n/react';
import React, { useState } from 'react';
import { useKibana } from '../../../../../../../plugins/kibana_react/public';
import { useKibana } from '../../../../kibana_react/public';
interface Props {
language: string;

View file

@ -53,11 +53,10 @@ import {
MAP_SAVED_OBJECT_TYPE,
MAP_APP_PATH
} from '../../common/constants';
import { start as data } from '../../../../../../src/legacy/core_plugins/data/public/legacy';
import { npStart } from 'ui/new_platform';
import { esFilters } from '../../../../../../src/plugins/data/public';
const { savedQueryService } = data.search.services;
const savedQueryService = npStart.plugins.data.query.savedQueries;
const REACT_ANCHOR_DOM_ELEMENT_ID = 'react-maps-root';

View file

@ -15,8 +15,8 @@ import {
Query,
TimeHistory,
TimeRange,
SavedQueryTimeFilter,
} from '../../../../../../../src/plugins/data/public';
import { SavedQueryTimeFilter } from '../../../../../../../src/legacy/core_plugins/data/public/search';
import { Storage } from '../../../../../../../src/plugins/kibana_utils/public';
export interface QueryBarComponentProps {

View file

@ -38,11 +38,10 @@ import { TimeRange, Query, esFilters } from '../../../../../../../src/plugins/da
const {
ui: { SearchBar },
search,
} = data;
export const siemFilterManager = npStart.plugins.data.query.filterManager;
export const savedQueryService = search.services.savedQueryService;
export const savedQueryService = npStart.plugins.data.query.savedQueries;
interface SiemSearchBarRedux {
end: number;

View file

@ -9,9 +9,13 @@ import React, { memo, useCallback, useState, useEffect } from 'react';
import { StaticIndexPattern } from 'ui/index_patterns';
import { Subscription } from 'rxjs';
import { SavedQueryTimeFilter } from '../../../../../../../../src/legacy/core_plugins/data/public/search';
import { SavedQuery } from '../../../../../../../../src/legacy/core_plugins/data/public';
import { Query, esFilters, FilterManager } from '../../../../../../../../src/plugins/data/public';
import {
Query,
esFilters,
FilterManager,
SavedQuery,
SavedQueryTimeFilter,
} from '../../../../../../../../src/plugins/data/public';
import { BrowserFields } from '../../../containers/source';
import { convertKueryToElasticSearchQuery } from '../../../lib/keury';

View file

@ -11,12 +11,12 @@ import { StaticIndexPattern } from 'ui/index_patterns';
import { Subscription } from 'rxjs';
import styled from 'styled-components';
import { SavedQueryTimeFilter } from '../../../../../../../../../../src/legacy/core_plugins/data/public/search';
import { SavedQuery } from '../../../../../../../../../../src/legacy/core_plugins/data/public';
import {
esFilters,
Query,
FilterManager,
SavedQuery,
SavedQueryTimeFilter,
} from '../../../../../../../../../../src/plugins/data/public';
import { QueryBar } from '../../../../../components/query_bar';

View file

@ -8,7 +8,7 @@ import { useState, useEffect } from 'react';
import {
SavedQueryService,
createSavedQueryService,
} from '../../../../../../../src/legacy/core_plugins/data/public/search/search_bar/lib/saved_query_service';
} from '../../../../../../../src/plugins/data/public';
import { useKibanaCore } from '../../lib/compose/kibana_core';