mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
[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:
parent
9b85ae95fb
commit
3e2761d981
262 changed files with 1467 additions and 1058 deletions
|
@ -8,6 +8,7 @@
|
|||
"version": "8.2.0",
|
||||
"kibanaVersion": "kibana",
|
||||
"requiredPlugins": [
|
||||
"unifiedSearch",
|
||||
"alerting",
|
||||
"features",
|
||||
"triggersActionsUi",
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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={[]}
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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>();
|
||||
|
|
|
@ -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}
|
||||
/>
|
||||
);
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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" }
|
||||
]
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue