[Unified search] Create unified search plugin (#127651)

* [Unified search] Create unified search plugin

* add unified_search into USES_STYLED_COMPONENTS

* fix JEST group 4

* update limits for data plugin

* fix: remove unifiedSearch plugin from x-pack/plugins/file_upload

* feat: updated .github/CODEOWNERS and set @elastic/kibana-app-services as a code owner

* apply PR comments

* [CI] Auto-commit changed files from 'node scripts/build_plugin_list_docs'

* feat: moved filter bar, apply filters folders and apply filter action from Data plugin to unified search plugin

* fix Checks

* fix Checks

* fix Linting and Default CI Group #16

* fix Checks

* fix Checks

* fix Linting (with types)

* fix show FILTER_BAR

* fix Jest Tests

* feat replece indexPatternsContranct in setIndexPatterns to DataViewsContract

* feat: removed unnecessary interface in unified search

* fix Checks

* fix Checks

* fix Jest Tests, Checks

* fix Checks

* resolve comments

Co-authored-by: Alexey Antonov <alexwizp@gmail.com>
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Nodir Latipov 2022-04-05 12:23:31 +05:00 committed by GitHub
parent 9b85ae95fb
commit 3e2761d981
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
262 changed files with 1467 additions and 1058 deletions

View file

@ -8,6 +8,7 @@
"version": "8.2.0",
"kibanaVersion": "kibana",
"requiredPlugins": [
"unifiedSearch",
"alerting",
"features",
"triggersActionsUi",

View file

@ -11,6 +11,7 @@ import { of } from 'rxjs';
import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers';
import { act } from 'react-dom/test-utils';
import { dataPluginMock } from 'src/plugins/data/public/mocks';
import { unifiedSearchPluginMock } from 'src/plugins/unified_search/public/mocks';
import { chartPluginMock } from 'src/plugins/charts/public/mocks';
import {
DataPublicPluginStart,
@ -98,6 +99,7 @@ const createDataPluginMock = () => {
};
const dataMock = createDataPluginMock();
const unifiedSearchMock = unifiedSearchPluginMock.createStartContract();
const chartsStartMock = chartPluginMock.createStartContract();
const defaultEsQueryExpressionParams: EsQueryAlertParams<SearchType.esQuery> = {
@ -139,6 +141,7 @@ describe('EsQueryAlertTypeExpression', () => {
const wrapper = mountWithIntl(
<EsQueryExpression
unifiedSearch={unifiedSearchMock}
ruleInterval="1m"
ruleThrottle="1m"
alertNotifyWhen="onThrottleInterval"

View file

@ -10,11 +10,9 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import { injectI18n } from '@kbn/i18n-react';
import { useKibana } from '../../../../../../../src/plugins/kibana_react/public';
import {
FilterItem,
getDisplayValueFromFilter,
} from '../../../../../../../src/plugins/data/public';
import { getDisplayValueFromFilter } from '../../../../../../../src/plugins/data/public';
import { Filter, IIndexPattern } from '../../../../../../../src/plugins/data/common';
import { FilterItem } from '../../../../../../../src/plugins/unified_search/public';
const FilterItemComponent = injectI18n(FilterItem);

View file

@ -8,6 +8,7 @@
import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers';
import React from 'react';
import { dataPluginMock } from 'src/plugins/data/public/mocks';
import { unifiedSearchPluginMock } from 'src/plugins/unified_search/public/mocks';
import { DataPublicPluginStart, ISearchStart } from 'src/plugins/data/public';
import { EsQueryAlertParams, SearchType } from '../types';
import { SearchSourceExpression } from './search_source_expression';
@ -21,6 +22,7 @@ const dataMock = dataPluginMock.createStartContract() as DataPublicPluginStart &
search: ISearchStart & { searchSource: { create: jest.MockedFunction<any> } };
};
const chartsStartMock = chartPluginMock.createStartContract();
const unifiedSearchMock = unifiedSearchPluginMock.createStartContract();
const defaultSearchSourceExpressionParams: EsQueryAlertParams<SearchType.searchSource> = {
size: 100,
@ -60,6 +62,7 @@ const setup = async (alertParams: EsQueryAlertParams<SearchType.searchSource>) =
setRuleParams={() => {}}
setRuleProperty={() => {}}
errors={errors}
unifiedSearch={unifiedSearchMock}
data={dataMock}
defaultActionGroupId=""
actionGroups={[]}

View file

@ -9,6 +9,7 @@ import React, { Fragment, FunctionComponent, useEffect, useRef } from 'react';
import { EuiFormRow } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { DataPublicPluginStart } from 'src/plugins/data/public';
import { UnifiedSearchPublicPluginStart } from 'src/plugins/unified_search/public';
import { HttpSetup } from 'kibana/public';
import { useKibana } from '../../../../../../../../src/plugins/kibana_react/public';
import { IErrorObject } from '../../../../../../triggers_actions_ui/public';
@ -27,6 +28,7 @@ interface Props {
setBoundaryGeoField: (boundaryGeoField?: string) => void;
setBoundaryNameField: (boundaryNameField?: string) => void;
data: DataPublicPluginStart;
unifiedSearch: UnifiedSearchPublicPluginStart;
}
interface KibanaDeps {
@ -42,11 +44,12 @@ export const BoundaryIndexExpression: FunctionComponent<Props> = ({
setBoundaryGeoField,
setBoundaryNameField,
data,
unifiedSearch,
}) => {
// eslint-disable-next-line react-hooks/exhaustive-deps
const BOUNDARY_NAME_ENTITY_TYPES = ['string', 'number', 'ip'];
const { http } = useKibana<KibanaDeps>().services;
const IndexPatternSelect = (data.ui && data.ui.IndexPatternSelect) || null;
const IndexPatternSelect = (unifiedSearch.ui && unifiedSearch.ui.IndexPatternSelect) || null;
const { boundaryGeoField } = ruleParams;
// eslint-disable-next-line react-hooks/exhaustive-deps
const nothingSelected: DataViewField = {

View file

@ -10,6 +10,7 @@ import { EuiFormRow } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { i18n } from '@kbn/i18n';
import { DataPublicPluginStart } from 'src/plugins/data/public';
import { UnifiedSearchPublicPluginStart } from 'src/plugins/unified_search/public';
import { HttpSetup } from 'kibana/public';
import { useKibana } from '../../../../../../../../src/plugins/kibana_react/public';
import {
@ -33,6 +34,7 @@ interface Props {
indexPattern: DataView;
isInvalid: boolean;
data: DataPublicPluginStart;
unifiedSearch: UnifiedSearchPublicPluginStart;
}
interface KibanaDeps {
@ -49,9 +51,10 @@ export const EntityIndexExpression: FunctionComponent<Props> = ({
dateField: timeField,
geoField,
data,
unifiedSearch,
}) => {
const { http } = useKibana<KibanaDeps>().services;
const IndexPatternSelect = (data.ui && data.ui.IndexPatternSelect) || null;
const IndexPatternSelect = (unifiedSearch.ui && unifiedSearch.ui.IndexPatternSelect) || null;
const usePrevious = <T extends unknown>(value: T): T | undefined => {
const ref = useRef<T>();

View file

@ -12,8 +12,10 @@ import { BoundaryIndexExpression } from './expressions/boundary_index_expression
import { IErrorObject } from '../../../../../triggers_actions_ui/public';
import { DataView } from '../../../../../../../src/plugins/data/common';
import { dataPluginMock } from 'src/plugins/data/public/mocks';
import { unifiedSearchPluginMock } from 'src/plugins/unified_search/public/mocks';
const dataStartMock = dataPluginMock.createStartContract();
const unifiedSearchStartMock = unifiedSearchPluginMock.createStartContract();
const alertParams = {
index: '',
@ -40,6 +42,7 @@ test('should render EntityIndexExpression', async () => {
indexPattern={'' as unknown as DataView}
isInvalid={false}
data={dataStartMock}
unifiedSearch={unifiedSearchStartMock}
/>
);
@ -59,6 +62,7 @@ test('should render EntityIndexExpression w/ invalid flag if invalid', async ()
indexPattern={'' as unknown as DataView}
isInvalid={true}
data={dataStartMock}
unifiedSearch={unifiedSearchStartMock}
/>
);
@ -76,6 +80,7 @@ test('should render BoundaryIndexExpression', async () => {
setBoundaryNameField={() => {}}
boundaryNameField={'testNameField'}
data={dataStartMock}
unifiedSearch={unifiedSearchStartMock}
/>
);

View file

@ -16,7 +16,8 @@ import { EntityIndexExpression } from './expressions/entity_index_expression';
import { EntityByExpression } from './expressions/entity_by_expression';
import { BoundaryIndexExpression } from './expressions/boundary_index_expression';
import { DataView } from '../../../../../../../src/plugins/data/common';
import { Query, QueryStringInput } from '../../../../../../../src/plugins/data/public';
import { Query } from '../../../../../../../src/plugins/data/public';
import { QueryStringInput } from '../../../../../../../src/plugins/unified_search/public';
const DEFAULT_VALUES = {
TRACKING_EVENT: '',
@ -45,7 +46,7 @@ function validateQuery(query: Query) {
export const GeoContainmentAlertTypeExpression: React.FunctionComponent<
RuleTypeParamsExpressionProps<GeoContainmentAlertParams>
> = ({ ruleParams, ruleInterval, setRuleParams, setRuleProperty, errors, data }) => {
> = ({ ruleParams, ruleInterval, setRuleParams, setRuleProperty, errors, data, unifiedSearch }) => {
const {
index,
indexId,
@ -173,6 +174,7 @@ export const GeoContainmentAlertTypeExpression: React.FunctionComponent<
indexPattern={indexPattern}
isInvalid={!indexId || !dateField || !geoField}
data={data}
unifiedSearch={unifiedSearch}
/>
<EntityByExpression
errors={errors}
@ -223,6 +225,7 @@ export const GeoContainmentAlertTypeExpression: React.FunctionComponent<
}
boundaryNameField={boundaryNameField}
data={data}
unifiedSearch={unifiedSearch}
/>
<EuiSpacer size="s" />
<EuiFlexItem>

View file

@ -64,7 +64,7 @@ function indexParamToArray(index: string | string[]): string[] {
}
export const IndexThresholdAlertTypeExpression: React.FunctionComponent<
RuleTypeParamsExpressionProps<IndexThresholdAlertParams>
Omit<RuleTypeParamsExpressionProps<IndexThresholdAlertParams>, 'unifiedSearch'>
> = ({ ruleParams, ruleInterval, setRuleParams, setRuleProperty, errors, charts, data }) => {
const {
index,

View file

@ -20,6 +20,7 @@
{ "path": "../../../src/plugins/kibana_react/tsconfig.json" },
{ "path": "../../../src/plugins/saved_objects/tsconfig.json" },
{ "path": "../../../src/plugins/data/tsconfig.json" },
{ "path": "../transform/tsconfig.json" }
{ "path": "../transform/tsconfig.json" },
{ "path": "../../../src/plugins/unified_search/tsconfig.json" }
]
}