44 * you may not use this file except in compliance with the Elastic License.
55 */
66
7- import React , { useCallback , useMemo , useEffect , useState } from 'react' ;
7+ import React , { ChangeEvent , useCallback , useMemo , useEffect , useState } from 'react' ;
88import {
99 EuiFlexGroup ,
1010 EuiFlexItem ,
@@ -13,6 +13,7 @@ import {
1313 EuiText ,
1414 EuiFormRow ,
1515 EuiButtonEmpty ,
16+ EuiFieldSearch ,
1617} from '@elastic/eui' ;
1718import { IFieldType } from 'src/plugins/data/public' ;
1819import { FormattedMessage } from '@kbn/i18n/react' ;
@@ -143,7 +144,7 @@ export const Expressions: React.FC<Props> = props => {
143144
144145 const onGroupByChange = useCallback (
145146 ( group : string | null ) => {
146- setAlertParams ( 'groupBy' , group || undefined ) ;
147+ setAlertParams ( 'groupBy' , group || '' ) ;
147148 } ,
148149 [ setAlertParams ]
149150 ) ;
@@ -211,10 +212,20 @@ export const Expressions: React.FC<Props> = props => {
211212 }
212213 setAlertParams ( 'sourceId' , source ?. id ) ;
213214 } else {
214- setAlertParams ( 'criteria' , [ defaultExpression ] ) ;
215+ if ( ! alertParams . criteria ) {
216+ setAlertParams ( 'criteria' , [ defaultExpression ] ) ;
217+ }
218+ if ( ! alertParams . sourceId ) {
219+ setAlertParams ( 'sourceId' , source ?. id || 'default' ) ;
220+ }
215221 }
216222 } , [ alertsContext . metadata , defaultExpression , source ] ) ; // eslint-disable-line react-hooks/exhaustive-deps
217223
224+ const handleFieldSearchChange = useCallback (
225+ ( e : ChangeEvent < HTMLInputElement > ) => onFilterQuerySubmit ( e . target . value ) ,
226+ [ onFilterQuerySubmit ]
227+ ) ;
228+
218229 return (
219230 < >
220231 < EuiSpacer size = { 'm' } />
@@ -269,48 +280,52 @@ export const Expressions: React.FC<Props> = props => {
269280
270281 < EuiSpacer size = { 'm' } />
271282
272- { alertsContext . metadata && (
273- < >
274- < EuiFormRow
275- label = { i18n . translate ( 'xpack.infra.metrics.alertFlyout.filterLabel' , {
276- defaultMessage : 'Filter (optional)' ,
277- } ) }
278- helpText = { i18n . translate ( 'xpack.infra.metrics.alertFlyout.filterHelpText' , {
279- defaultMessage : 'Use a KQL expression to limit the scope of your alert trigger.' ,
280- } ) }
281- fullWidth
282- compressed
283- >
284- < MetricsExplorerKueryBar
285- derivedIndexPattern = { derivedIndexPattern }
286- onSubmit = { onFilterQuerySubmit }
287- value = { alertParams . filterQuery }
288- />
289- </ EuiFormRow >
290-
291- < EuiSpacer size = { 'm' } />
292- < EuiFormRow
293- label = { i18n . translate ( 'xpack.infra.metrics.alertFlyout.createAlertPerText' , {
294- defaultMessage : 'Create alert per (optional)' ,
295- } ) }
296- helpText = { i18n . translate ( 'xpack.infra.metrics.alertFlyout.createAlertPerHelpText' , {
297- defaultMessage :
298- 'Create an alert for every unique value. For example: "host.id" or "cloud.region".' ,
299- } ) }
283+ < EuiFormRow
284+ label = { i18n . translate ( 'xpack.infra.metrics.alertFlyout.filterLabel' , {
285+ defaultMessage : 'Filter (optional)' ,
286+ } ) }
287+ helpText = { i18n . translate ( 'xpack.infra.metrics.alertFlyout.filterHelpText' , {
288+ defaultMessage : 'Use a KQL expression to limit the scope of your alert trigger.' ,
289+ } ) }
290+ fullWidth
291+ compressed
292+ >
293+ { ( alertsContext . metadata && (
294+ < MetricsExplorerKueryBar
295+ derivedIndexPattern = { derivedIndexPattern }
296+ onSubmit = { onFilterQuerySubmit }
297+ value = { alertParams . filterQuery }
298+ />
299+ ) ) || (
300+ < EuiFieldSearch
301+ onChange = { handleFieldSearchChange }
302+ value = { alertParams . filterQuery }
300303 fullWidth
301- compressed
302- >
303- < MetricsExplorerGroupBy
304- onChange = { onGroupByChange }
305- fields = { derivedIndexPattern . fields }
306- options = { {
307- ...options ,
308- groupBy : alertParams . groupBy || undefined ,
309- } }
310- />
311- </ EuiFormRow >
312- </ >
313- ) }
304+ />
305+ ) }
306+ </ EuiFormRow >
307+
308+ < EuiSpacer size = { 'm' } />
309+ < EuiFormRow
310+ label = { i18n . translate ( 'xpack.infra.metrics.alertFlyout.createAlertPerText' , {
311+ defaultMessage : 'Create alert per (optional)' ,
312+ } ) }
313+ helpText = { i18n . translate ( 'xpack.infra.metrics.alertFlyout.createAlertPerHelpText' , {
314+ defaultMessage :
315+ 'Create an alert for every unique value. For example: "host.id" or "cloud.region".' ,
316+ } ) }
317+ fullWidth
318+ compressed
319+ >
320+ < MetricsExplorerGroupBy
321+ onChange = { onGroupByChange }
322+ fields = { derivedIndexPattern . fields }
323+ options = { {
324+ ...options ,
325+ groupBy : alertParams . groupBy || undefined ,
326+ } }
327+ />
328+ </ EuiFormRow >
314329 </ >
315330 ) ;
316331} ;
0 commit comments