[SLOs] Add/Edit form KQL Validation (#174465)

## Summary

Fixes https://github.com/elastic/kibana/issues/160390

Add/Edit form KQL Validation !!

<img width="1020" alt="image"
src="30ecaba5-e567-4964-acb2-5d687f8a2e55">
This commit is contained in:
Shahzad 2024-02-19 11:43:37 +01:00 committed by GitHub
parent 6cf59182d1
commit f4fb1e8d90
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 1 deletions

View file

@ -8,6 +8,7 @@
import { EuiFormRow } from '@elastic/eui';
import React, { ReactNode } from 'react';
import { Controller, FieldPath, useFormContext } from 'react-hook-form';
import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query';
import styled from 'styled-components';
import { kqlQuerySchema } from '@kbn/slo-schema';
import { useCreateDataView } from '../../../../hooks/use_create_data_view';
@ -59,6 +60,7 @@ export function QueryBuilder({
}
labelAppend={!required ? <OptionalText /> : undefined}
isInvalid={getFieldState(name).invalid}
error={getFieldState(name).error?.message}
fullWidth
>
<Controller
@ -67,6 +69,15 @@ export function QueryBuilder({
control={control}
rules={{
required: Boolean(required) && Boolean(dataView),
validate: (value) => {
try {
if (!dataView) return;
const ast = fromKueryExpression(String(value));
toElasticsearchQuery(ast, dataView);
} catch (e) {
return e.message;
}
},
}}
render={({ field, fieldState }) => (
<Container>

View file

@ -80,7 +80,7 @@ export function IndexSelection() {
trigger={{
label: field.value || SELECT_DATA_VIEW,
fullWidth: true,
color: 'text',
color: fieldState.invalid ? 'danger' : 'text',
isLoading: isDataViewsLoading,
'data-test-subj': 'indexSelection',
}}