diff --git a/src/plugins/unified_search/public/autocomplete/providers/kql_query_suggestion/async_loads.ts b/src/plugins/unified_search/public/autocomplete/providers/kql_query_suggestion/async_loads.ts new file mode 100644 index 0000000000000..f8795334200f0 --- /dev/null +++ b/src/plugins/unified_search/public/autocomplete/providers/kql_query_suggestion/async_loads.ts @@ -0,0 +1,12 @@ +/* + * 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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { setupGetFieldSuggestions } from './field'; +export { setupGetValueSuggestions } from './value'; +export { setupGetOperatorSuggestions } from './operator'; +export { setupGetConjunctionSuggestions } from './conjunction'; diff --git a/src/plugins/unified_search/public/autocomplete/providers/kql_query_suggestion/index.ts b/src/plugins/unified_search/public/autocomplete/providers/kql_query_suggestion/index.ts index cd022ec371e65..e8e96acc1c2e5 100644 --- a/src/plugins/unified_search/public/autocomplete/providers/kql_query_suggestion/index.ts +++ b/src/plugins/unified_search/public/autocomplete/providers/kql_query_suggestion/index.ts @@ -6,15 +6,12 @@ * Side Public License, v 1. */ -import { CoreSetup } from '@kbn/core/public'; -import { $Keys } from 'utility-types'; +import type { CoreSetup } from '@kbn/core/public'; +import type { $Keys } from 'utility-types'; import { flatten, uniqBy } from 'lodash'; -import { setupGetFieldSuggestions } from './field'; -import { setupGetValueSuggestions } from './value'; -import { setupGetOperatorSuggestions } from './operator'; -import { setupGetConjunctionSuggestions } from './conjunction'; -import { UnifiedSearchPublicPluginStart } from '../../../types'; -import { +import type { UnifiedSearchPublicPluginStart } from '../../../types'; + +import type { QuerySuggestion, QuerySuggestionGetFnArgs, QuerySuggestionGetFn, @@ -30,30 +27,49 @@ export const KUERY_LANGUAGE_NAME = 'kuery'; export const setupKqlQuerySuggestionProvider = ( core: CoreSetup ): QuerySuggestionGetFn => { - const providers = { - field: setupGetFieldSuggestions(core), - value: setupGetValueSuggestions(core), - operator: setupGetOperatorSuggestions(core), - conjunction: setupGetConjunctionSuggestions(core), - }; + let getSuggestionsByType: + | (( + cursoredQuery: string, + querySuggestionsArgs: QuerySuggestionGetFnArgs + ) => Promise> | []>) + | undefined; - const getSuggestionsByType = async ( - cursoredQuery: string, - querySuggestionsArgs: QuerySuggestionGetFnArgs - ): Promise> | []> => { - try { - const { fromKueryExpression } = await import('@kbn/es-query'); - const cursorNode = fromKueryExpression(cursoredQuery, { - cursorSymbol, - parseCursor: true, - }); - - return cursorNode.suggestionTypes.map((type: $Keys) => - providers[type](querySuggestionsArgs, cursorNode) - ); - } catch (e) { - return []; + const asyncGetSuggestionsByTypeFn = async () => { + if (getSuggestionsByType) { + return getSuggestionsByType; } + const { + setupGetFieldSuggestions, + setupGetValueSuggestions, + setupGetOperatorSuggestions, + setupGetConjunctionSuggestions, + } = await import('./async_loads'); + const { fromKueryExpression } = await import('@kbn/es-query'); + + const providers = { + field: setupGetFieldSuggestions(core), + value: setupGetValueSuggestions(core), + operator: setupGetOperatorSuggestions(core), + conjunction: setupGetConjunctionSuggestions(core), + }; + + return (getSuggestionsByType = async ( + cursoredQuery: string, + querySuggestionsArgs: QuerySuggestionGetFnArgs + ): Promise> | []> => { + try { + const cursorNode = fromKueryExpression(cursoredQuery, { + cursorSymbol, + parseCursor: true, + }); + + return cursorNode.suggestionTypes.map((type: $Keys) => + providers[type](querySuggestionsArgs, cursorNode) + ); + } catch (e) { + return []; + } + }); }; return async (querySuggestionsArgs): Promise => { @@ -61,9 +77,9 @@ export const setupKqlQuerySuggestionProvider = ( const cursoredQuery = `${query.substr(0, selectionStart)}${cursorSymbol}${query.substr( selectionEnd )}`; - - return Promise.all(await getSuggestionsByType(cursoredQuery, querySuggestionsArgs)).then( - (suggestionsByType) => dedup(flatten(suggestionsByType)) + const fn = await asyncGetSuggestionsByTypeFn(); + return Promise.all(await fn(cursoredQuery, querySuggestionsArgs)).then((suggestionsByType) => + dedup(flatten(suggestionsByType)) ); }; }; diff --git a/src/plugins/unified_search/public/autocomplete/providers/value_suggestion_provider.ts b/src/plugins/unified_search/public/autocomplete/providers/value_suggestion_provider.ts index 127754583d448..546d6bc80a3a9 100644 --- a/src/plugins/unified_search/public/autocomplete/providers/value_suggestion_provider.ts +++ b/src/plugins/unified_search/public/autocomplete/providers/value_suggestion_provider.ts @@ -12,7 +12,7 @@ import { memoize } from 'lodash'; import { UI_SETTINGS, ValueSuggestionsMethod } from '@kbn/data-plugin/common'; import type { DataView, DataViewField } from '@kbn/data-views-plugin/common'; import type { TimefilterSetup } from '@kbn/data-plugin/public'; -import { AutocompleteUsageCollector } from '../collectors'; +import type { AutocompleteUsageCollector } from '../collectors'; export type ValueSuggestionsGetFn = (args: ValueSuggestionsGetFnArgs) => Promise; diff --git a/src/plugins/unified_search/public/dataview_picker/change_dataview.test.tsx b/src/plugins/unified_search/public/dataview_picker/change_dataview.test.tsx index 362ff4a209164..9524935b041e8 100644 --- a/src/plugins/unified_search/public/dataview_picker/change_dataview.test.tsx +++ b/src/plugins/unified_search/public/dataview_picker/change_dataview.test.tsx @@ -15,7 +15,7 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { indexPatternEditorPluginMock as dataViewEditorPluginMock } from '@kbn/data-view-editor-plugin/public/mocks'; import { ChangeDataView } from './change_dataview'; -import { DataViewPickerPropsExtended, TextBasedLanguages } from '.'; +import { DataViewPickerPropsExtended, TextBasedLanguages } from './data_view_picker'; describe('DataView component', () => { const createMockWebStorage = () => ({ diff --git a/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx b/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx index 2b451ff193e53..6d0ddd651a659 100644 --- a/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx +++ b/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx @@ -27,7 +27,7 @@ import { } from '@elastic/eui'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import type { IUnifiedSearchPluginServices } from '../types'; -import type { DataViewPickerPropsExtended } from '.'; +import type { DataViewPickerPropsExtended } from './data_view_picker'; import type { DataViewListItemEnhanced } from './dataview_list'; import type { TextBasedLanguagesListProps } from './text_languages_list'; import type { TextBasedLanguagesTransitionModalProps } from './text_languages_transition_modal'; diff --git a/src/plugins/unified_search/public/dataview_picker/data_view_picker.tsx b/src/plugins/unified_search/public/dataview_picker/data_view_picker.tsx new file mode 100644 index 0000000000000..abb9fe0dd7ca2 --- /dev/null +++ b/src/plugins/unified_search/public/dataview_picker/data_view_picker.tsx @@ -0,0 +1,147 @@ +/* + * 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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import type { EuiButtonProps, EuiSelectableProps } from '@elastic/eui'; +import type { DataView, DataViewListItem } from '@kbn/data-views-plugin/public'; +import type { AggregateQuery, Query } from '@kbn/es-query'; +import { ChangeDataView } from './change_dataview'; + +export type ChangeDataViewTriggerProps = EuiButtonProps & { + label: string; + title?: string; +}; + +export enum TextBasedLanguages { + SQL = 'SQL', + ESQL = 'ESQL', +} + +export interface OnSaveTextLanguageQueryProps { + onSave: () => void; + onCancel: () => void; +} + +/** @public */ +export interface DataViewPickerProps { + /** + * The properties of the button that triggers the dataview picker. + */ + trigger: ChangeDataViewTriggerProps; + /** + * Flag that should be enabled when the current dataview is missing. + */ + isMissingCurrent?: boolean; + /** + * Callback that is called when the user changes the currently selected dataview. + */ + onChangeDataView: (newId: string) => void; + /** + * Callback that is called when the user edits the current data view via flyout. + * The first parameter is the updated data view stub without fetched fields + */ + onEditDataView?: (updatedDataViewStub: DataView) => void; + /** + * The id of the selected dataview. + */ + currentDataViewId?: string; + /** + * The adHocDataviews. + */ + adHocDataViews?: DataView[]; + /** + * Saved data views + */ + savedDataViews?: DataViewListItem[]; + /** + * EuiSelectable properties. + */ + selectableProps?: EuiSelectableProps; + /** + * Callback that is called when the user clicks the add runtime field option. + * Also works as a flag to show the add runtime field button. + */ + onAddField?: () => void; + /** + * Callback that is called when the user clicks the create dataview option. + * Also works as a flag to show the create dataview button. + */ + onDataViewCreated?: () => void; + + onCreateDefaultAdHocDataView?: (pattern: string) => void; + /** + * List of the supported text based languages (SQL, ESQL) etc. + * Defined per application, if not provided, no text based languages + * will be available. + */ + textBasedLanguages?: TextBasedLanguages[]; + /** + * Callback that is called when the user clicks the Save and switch transition modal button + */ + onSaveTextLanguageQuery?: ({ onSave, onCancel }: OnSaveTextLanguageQueryProps) => void; + + /** + * Makes the picker disabled by disabling the popover trigger + */ + isDisabled?: boolean; +} + +export interface DataViewPickerPropsExtended extends DataViewPickerProps { + /** + * Callback that is called when the user clicks the submit button + */ + onTextLangQuerySubmit?: (query?: Query | AggregateQuery) => void; + /** + * Text based language that is currently selected; depends on the query + */ + textBasedLanguage?: string; +} + +export const DataViewPicker = ({ + isMissingCurrent, + currentDataViewId, + adHocDataViews, + savedDataViews, + onChangeDataView, + onEditDataView, + onAddField, + onDataViewCreated, + trigger, + selectableProps, + textBasedLanguages, + onSaveTextLanguageQuery, + onTextLangQuerySubmit, + textBasedLanguage, + onCreateDefaultAdHocDataView, + isDisabled, +}: DataViewPickerPropsExtended) => { + return ( + + ); +}; + +// React.lazy support +// eslint-disable-next-line import/no-default-export +export default DataViewPicker; diff --git a/src/plugins/unified_search/public/dataview_picker/data_view_selector.tsx b/src/plugins/unified_search/public/dataview_picker/data_view_selector.tsx index 9a83a887de4cf..e01128339ea18 100644 --- a/src/plugins/unified_search/public/dataview_picker/data_view_selector.tsx +++ b/src/plugins/unified_search/public/dataview_picker/data_view_selector.tsx @@ -14,7 +14,7 @@ import { DataViewsList } from './dataview_list'; import { IUnifiedSearchPluginServices } from '../types'; import { ExploreMatchingButton } from './explore_matching_button'; -interface DataViewSelectorProps { +export interface DataViewSelectorProps { currentDataViewId?: string; searchListInputId?: string; dataViewsList: DataViewListItem[]; @@ -95,3 +95,7 @@ export const DataViewSelector = ({ ); }; + +// React.lazy support +// eslint-disable-next-line import/no-default-export +export default DataViewSelector; diff --git a/src/plugins/unified_search/public/dataview_picker/dataview_list.tsx b/src/plugins/unified_search/public/dataview_picker/dataview_list.tsx index 33fd7194ff871..e46bbe2bfa0c4 100644 --- a/src/plugins/unified_search/public/dataview_picker/dataview_list.tsx +++ b/src/plugins/unified_search/public/dataview_picker/dataview_list.tsx @@ -90,3 +90,7 @@ export function DataViewsList({ ); } + +// React.lazy support +// eslint-disable-next-line import/no-default-export +export default DataViewsList; diff --git a/src/plugins/unified_search/public/dataview_picker/index.tsx b/src/plugins/unified_search/public/dataview_picker/index.tsx index 9cb50d5e85a79..895f48384ab18 100644 --- a/src/plugins/unified_search/public/dataview_picker/index.tsx +++ b/src/plugins/unified_search/public/dataview_picker/index.tsx @@ -7,137 +7,45 @@ */ import React from 'react'; -import type { EuiButtonProps, EuiSelectableProps } from '@elastic/eui'; -import type { DataView, DataViewListItem } from '@kbn/data-views-plugin/public'; -import type { AggregateQuery, Query } from '@kbn/es-query'; -import { ChangeDataView } from './change_dataview'; +import { withSuspense } from '@kbn/shared-ux-utility'; -export type ChangeDataViewTriggerProps = EuiButtonProps & { - label: string; - title?: string; -}; +export type { DataViewPickerProps, OnSaveTextLanguageQueryProps } from './data_view_picker'; -export enum TextBasedLanguages { - SQL = 'SQL', - ESQL = 'ESQL', -} - -export interface OnSaveTextLanguageQueryProps { - onSave: () => void; - onCancel: () => void; -} +/** + * The Lazily-loaded `DataViewsList` component. Consumers should use `React.Suspense` or + * the withSuspense` HOC to load this component. + */ +export const DataViewsListLazy = React.lazy(() => import('./dataview_list')); -/** @public */ -export interface DataViewPickerProps { - /** - * The properties of the button that triggers the dataview picker. - */ - trigger: ChangeDataViewTriggerProps; - /** - * Flag that should be enabled when the current dataview is missing. - */ - isMissingCurrent?: boolean; - /** - * Callback that is called when the user changes the currently selected dataview. - */ - onChangeDataView: (newId: string) => void; - /** - * Callback that is called when the user edits the current data view via flyout. - * The first parameter is the updated data view stub without fetched fields - */ - onEditDataView?: (updatedDataViewStub: DataView) => void; - /** - * The id of the selected dataview. - */ - currentDataViewId?: string; - /** - * The adHocDataviews. - */ - adHocDataViews?: DataView[]; - /** - * Saved data views - */ - savedDataViews?: DataViewListItem[]; - /** - * EuiSelectable properties. - */ - selectableProps?: EuiSelectableProps; - /** - * Callback that is called when the user clicks the add runtime field option. - * Also works as a flag to show the add runtime field button. - */ - onAddField?: () => void; - /** - * Callback that is called when the user clicks the create dataview option. - * Also works as a flag to show the create dataview button. - */ - onDataViewCreated?: () => void; +/** + * A `DataViewsList` component that is wrapped by the `withSuspense` HOC. This component can + * be used directly by consumers and will load the `DataViewsLazy` component lazily with + * a predefined fallback and error boundary. + */ +export const DataViewsList = withSuspense(DataViewsListLazy); - onCreateDefaultAdHocDataView?: (pattern: string) => void; - /** - * List of the supported text based languages (SQL, ESQL) etc. - * Defined per application, if not provided, no text based languages - * will be available. - */ - textBasedLanguages?: TextBasedLanguages[]; - /** - * Callback that is called when the user clicks the Save and switch transition modal button - */ - onSaveTextLanguageQuery?: ({ onSave, onCancel }: OnSaveTextLanguageQueryProps) => void; +/** + * The Lazily-loaded `DataViewSelector` component. Consumers should use `React.Suspense` or + * the withSuspense` HOC to load this component. + */ +export const DataViewSelectorLazy = React.lazy(() => import('./data_view_selector')); - /** - * Makes the picker disabled by disabling the popover trigger - */ - isDisabled?: boolean; -} +/** + * A `DataViewSelector` component that is wrapped by the `withSuspense` HOC. This component can + * be used directly by consumers and will load the `DataViewSelectorLazy` component lazily with + * a predefined fallback and error boundary. + */ +export const DataViewSelector = withSuspense(DataViewSelectorLazy); -export interface DataViewPickerPropsExtended extends DataViewPickerProps { - /** - * Callback that is called when the user clicks the submit button - */ - onTextLangQuerySubmit?: (query?: Query | AggregateQuery) => void; - /** - * Text based language that is currently selected; depends on the query - */ - textBasedLanguage?: string; -} +/** + * The Lazily-loaded `DataViewPicker` component. Consumers should use `React.Suspense` or + * the withSuspense` HOC to load this component. + */ +export const DataViewPickerLazy = React.lazy(() => import('./data_view_picker')); -export const DataViewPicker = ({ - isMissingCurrent, - currentDataViewId, - adHocDataViews, - savedDataViews, - onChangeDataView, - onEditDataView, - onAddField, - onDataViewCreated, - trigger, - selectableProps, - textBasedLanguages, - onSaveTextLanguageQuery, - onTextLangQuerySubmit, - textBasedLanguage, - onCreateDefaultAdHocDataView, - isDisabled, -}: DataViewPickerPropsExtended) => { - return ( - - ); -}; +/** + * A `DataViewPicker` component that is wrapped by the `withSuspense` HOC. This component can + * be used directly by consumers and will load the `DataViewPickerLazy` component lazily with + * a predefined fallback and error boundary. + */ +export const DataViewPicker = withSuspense(DataViewPickerLazy); diff --git a/src/plugins/unified_search/public/dataview_picker/text_languages_list.test.tsx b/src/plugins/unified_search/public/dataview_picker/text_languages_list.test.tsx index 1624eefac36e0..deb619b236338 100644 --- a/src/plugins/unified_search/public/dataview_picker/text_languages_list.test.tsx +++ b/src/plugins/unified_search/public/dataview_picker/text_languages_list.test.tsx @@ -12,7 +12,7 @@ import { act } from 'react-dom/test-utils'; import { ShallowWrapper } from 'enzyme'; import { shallowWithIntl as shallow } from '@kbn/test-jest-helpers'; import TextBasedLanguagesList, { TextBasedLanguagesListProps } from './text_languages_list'; -import { TextBasedLanguages } from '.'; +import { TextBasedLanguages } from './data_view_picker'; function getTextLanguagesPickerList(instance: ShallowWrapper) { return instance.find(EuiSelectable).first(); diff --git a/src/plugins/unified_search/public/dataview_picker/text_languages_list.tsx b/src/plugins/unified_search/public/dataview_picker/text_languages_list.tsx index cf070b7746bfe..3b07b4ca44f1c 100644 --- a/src/plugins/unified_search/public/dataview_picker/text_languages_list.tsx +++ b/src/plugins/unified_search/public/dataview_picker/text_languages_list.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { EuiSelectable, EuiPanel, EuiBadge } from '@elastic/eui'; -import { TextBasedLanguages } from '.'; +import { TextBasedLanguages } from './data_view_picker'; export interface TextBasedLanguagesListProps { textBasedLanguages: TextBasedLanguages[]; diff --git a/src/plugins/unified_search/public/index.ts b/src/plugins/unified_search/public/index.ts index 3f0e26c5aba63..8d7a6146e02a5 100755 --- a/src/plugins/unified_search/public/index.ts +++ b/src/plugins/unified_search/public/index.ts @@ -21,10 +21,8 @@ export { SearchBar } from './search_bar'; export type { FilterItemsProps } from './filter_bar'; export { FilterItem, FilterItems } from './filter_bar'; export { FilterBadgeGroup } from './filter_badge'; -export { DataViewsList } from './dataview_picker/dataview_list'; -export { DataViewSelector } from './dataview_picker/data_view_selector'; -export { DataViewPicker } from './dataview_picker'; +export { DataViewPicker, DataViewSelector, DataViewsList } from './dataview_picker'; export type { DataViewPickerProps } from './dataview_picker'; export type { ApplyGlobalFilterActionContext } from './actions'; diff --git a/src/plugins/unified_search/public/plugin.ts b/src/plugins/unified_search/public/plugin.ts index 645652cd60f34..f1f495341c155 100755 --- a/src/plugins/unified_search/public/plugin.ts +++ b/src/plugins/unified_search/public/plugin.ts @@ -13,7 +13,7 @@ import { UPDATE_FILTER_REFERENCES_TRIGGER, updateFilterReferencesTrigger } from import { ConfigSchema } from '../config'; import { setIndexPatterns, setTheme, setOverlays } from './services'; import { AutocompleteService } from './autocomplete/autocomplete_service'; -import { createSearchBar } from './search_bar'; +import { createSearchBar } from './search_bar/create_search_bar'; import { createIndexPatternSelect } from './index_pattern_select'; import type { UnifiedSearchStartDependencies, diff --git a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx index d13a0b0e8a261..d4d35f2545b73 100644 --- a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx @@ -29,7 +29,7 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { TimeHistoryContract, getQueryLog } from '@kbn/data-plugin/public'; -import { DataView } from '@kbn/data-views-plugin/public'; +import type { DataView } from '@kbn/data-views-plugin/public'; import type { PersistedLog } from '@kbn/data-plugin/public'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; @@ -43,6 +43,7 @@ import { DataViewPickerProps, OnSaveTextLanguageQueryProps, } from '../dataview_picker'; + import { FilterButtonGroup } from '../filter_bar/filter_button_group/filter_button_group'; import type { SuggestionsListSize } from '../typeahead/suggestions_component'; import { TextBasedLanguagesEditor } from './text_based_languages_editor'; diff --git a/src/plugins/unified_search/public/query_string_input/text_based_languages_editor/index.tsx b/src/plugins/unified_search/public/query_string_input/text_based_languages_editor/index.tsx index ab9e8b0374783..a4c3fff325bae 100644 --- a/src/plugins/unified_search/public/query_string_input/text_based_languages_editor/index.tsx +++ b/src/plugins/unified_search/public/query_string_input/text_based_languages_editor/index.tsx @@ -48,7 +48,7 @@ import { EditorFooter } from './editor_footer'; import { ResizableButton } from './resizable_button'; import './overwrite.scss'; -import { IUnifiedSearchPluginServices } from '../../types'; +import type { IUnifiedSearchPluginServices } from '../../types'; export interface TextBasedLanguagesEditorProps { query: AggregateQuery; diff --git a/src/plugins/unified_search/public/search_bar/create_search_bar.tsx b/src/plugins/unified_search/public/search_bar/create_search_bar.tsx index d6e02f55dfa46..d522991778ead 100644 --- a/src/plugins/unified_search/public/search_bar/create_search_bar.tsx +++ b/src/plugins/unified_search/public/search_bar/create_search_bar.tsx @@ -6,22 +6,22 @@ * Side Public License, v 1. */ -import _ from 'lodash'; +import { isEqual } from 'lodash'; import React, { useEffect, useRef } from 'react'; -import { CoreStart } from '@kbn/core/public'; -import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public'; +import type { CoreStart } from '@kbn/core/public'; +import type { IStorageWrapper } from '@kbn/kibana-utils-plugin/public'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; -import { QueryStart, SavedQuery, DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { QueryStart, SavedQuery, DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { Query, AggregateQuery } from '@kbn/es-query'; import type { Filter, TimeRange } from '@kbn/es-query'; -import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; +import type { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; import { SearchBar } from '.'; import type { SearchBarOwnProps } from '.'; import { useFilterManager } from './lib/use_filter_manager'; import { useTimefilter } from './lib/use_timefilter'; import { useSavedQuery } from './lib/use_saved_query'; import { useQueryStringManager } from './lib/use_query_string_manager'; -import { UnifiedSearchPublicPluginStart } from '../types'; +import type { UnifiedSearchPublicPluginStart } from '../types'; interface StatefulSearchBarDeps { core: CoreStart; @@ -78,8 +78,7 @@ const defaultOnQuerySubmit = ( return (payload: { dateRange: TimeRange; query?: QT | Query }) => { const isUpdate = - !_.isEqual(timefilter.getTime(), payload.dateRange) || - !_.isEqual(payload.query, currentQuery); + !isEqual(timefilter.getTime(), payload.dateRange) || !isEqual(payload.query, currentQuery); if (isUpdate) { timefilter.setTime(payload.dateRange); if (payload.query) { diff --git a/src/plugins/unified_search/public/search_bar/index.tsx b/src/plugins/unified_search/public/search_bar/index.tsx index 3a32ccb982147..eb65b81574c20 100644 --- a/src/plugins/unified_search/public/search_bar/index.tsx +++ b/src/plugins/unified_search/public/search_bar/index.tsx @@ -7,7 +7,7 @@ */ import React from 'react'; -import { AggregateQuery, Query } from '@kbn/es-query'; +import type { AggregateQuery, Query } from '@kbn/es-query'; import type { SearchBarProps } from './search_bar'; const Fallback = () =>
; @@ -24,4 +24,3 @@ const WrappedSearchBar = ( export const SearchBar = WrappedSearchBar; export type { StatefulSearchBarProps } from './create_search_bar'; export type { SearchBarProps, SearchBarOwnProps } from './search_bar'; -export { createSearchBar } from './create_search_bar'; diff --git a/src/plugins/unified_search/public/search_bar/lib/clear_saved_query.ts b/src/plugins/unified_search/public/search_bar/lib/clear_saved_query.ts index dfe90be4cf0d1..5d1d06c671a63 100644 --- a/src/plugins/unified_search/public/search_bar/lib/clear_saved_query.ts +++ b/src/plugins/unified_search/public/search_bar/lib/clear_saved_query.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { QueryStart } from '@kbn/data-plugin/public'; +import type { QueryStart } from '@kbn/data-plugin/public'; export const clearStateFromSavedQuery = (queryService: QueryStart) => { queryService.filterManager.removeAll(); diff --git a/src/plugins/unified_search/public/search_bar/lib/populate_state_from_saved_query.ts b/src/plugins/unified_search/public/search_bar/lib/populate_state_from_saved_query.ts index cf53433f32c55..f326fc60a91ca 100644 --- a/src/plugins/unified_search/public/search_bar/lib/populate_state_from_saved_query.ts +++ b/src/plugins/unified_search/public/search_bar/lib/populate_state_from_saved_query.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { QueryStart, SavedQuery } from '@kbn/data-plugin/public'; +import type { QueryStart, SavedQuery } from '@kbn/data-plugin/public'; export const populateStateFromSavedQuery = (queryService: QueryStart, savedQuery: SavedQuery) => { const { diff --git a/src/plugins/unified_search/public/search_bar/lib/use_filter_manager.ts b/src/plugins/unified_search/public/search_bar/lib/use_filter_manager.ts index a6d0487cb90c7..8edcf60d97752 100644 --- a/src/plugins/unified_search/public/search_bar/lib/use_filter_manager.ts +++ b/src/plugins/unified_search/public/search_bar/lib/use_filter_manager.ts @@ -8,7 +8,7 @@ import { useState, useEffect } from 'react'; import { Subscription } from 'rxjs'; -import { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { Filter } from '@kbn/es-query'; interface UseFilterManagerProps { diff --git a/src/plugins/unified_search/public/search_bar/lib/use_saved_query.ts b/src/plugins/unified_search/public/search_bar/lib/use_saved_query.ts index 7e8b41c73fcfd..b6a39d63d216e 100644 --- a/src/plugins/unified_search/public/search_bar/lib/use_saved_query.ts +++ b/src/plugins/unified_search/public/search_bar/lib/use_saved_query.ts @@ -9,9 +9,9 @@ import { useState, useEffect } from 'react'; import { i18n } from '@kbn/i18n'; -import { CoreStart } from '@kbn/core/public'; -import { SavedQuery } from '@kbn/data-plugin/public'; -import { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { CoreStart } from '@kbn/core/public'; +import type { SavedQuery } from '@kbn/data-plugin/public'; +import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { populateStateFromSavedQuery } from './populate_state_from_saved_query'; import { clearStateFromSavedQuery } from './clear_saved_query'; diff --git a/src/plugins/unified_search/public/search_bar/lib/use_timefilter.ts b/src/plugins/unified_search/public/search_bar/lib/use_timefilter.ts index 07a8e0e8ac1b5..ddfff690fce81 100644 --- a/src/plugins/unified_search/public/search_bar/lib/use_timefilter.ts +++ b/src/plugins/unified_search/public/search_bar/lib/use_timefilter.ts @@ -8,7 +8,7 @@ import { useState, useEffect } from 'react'; import { Subscription } from 'rxjs'; -import { DataPublicPluginStart, RefreshInterval } from '@kbn/data-plugin/public'; +import type { DataPublicPluginStart, RefreshInterval } from '@kbn/data-plugin/public'; import type { TimeRange } from '@kbn/es-query'; interface UseTimefilterProps { diff --git a/x-pack/plugins/lens/public/datasources/form_based/layerpanel.test.tsx b/x-pack/plugins/lens/public/datasources/form_based/layerpanel.test.tsx index 2b4fc7f740524..7bed12d8e5931 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/layerpanel.test.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/layerpanel.test.tsx @@ -11,11 +11,21 @@ import { FormBasedLayerPanelProps, LayerPanel } from './layerpanel'; import { shallowWithIntl as shallow } from '@kbn/test-jest-helpers'; import { ShallowWrapper } from 'enzyme'; import { EuiSelectable } from '@elastic/eui'; -import { DataViewsList } from '@kbn/unified-search-plugin/public'; +import { DataViewsList } from '@kbn/unified-search-plugin/public/dataview_picker/dataview_list'; import { ChangeIndexPattern } from '../../shared_components/dataview_picker/dataview_picker'; import { getFieldByNameFactory } from './pure_helpers'; import { TermsIndexPatternColumn } from './operations'; +jest.mock('@kbn/unified-search-plugin/public', () => { + const actual = jest.requireActual('@kbn/unified-search-plugin/public'); + return { + ...actual, + DataViewsList: jest.requireActual( + '@kbn/unified-search-plugin/public/dataview_picker/dataview_list' + ).DataViewsList, + }; +}); + interface IndexPatternPickerOption { label: string; checked?: 'on' | 'off';