1
- import React , { useEffect , useState } from 'react' ;
1
+ import React , { useCallback , useEffect , useState } from 'react' ;
2
2
import FormSelect from '../components/FormField/FormSelect' ;
3
3
import { alertAcknowledgeOptions , alertTypesOptions , feedbackOptions , severityOptions } from '../utils/constants' ;
4
4
import { AlertsQuery , ScenarioProps } from '../types' ;
@@ -12,6 +12,12 @@ export const defaultAlertsQuery: Partial<AlertsQuery> = {
12
12
feedback : [ ] ,
13
13
} ;
14
14
15
+ enum FeedbacksEnums {
16
+ noFeedback = 'noFeedback' ,
17
+ positiveFeedback = 'positiveFeedback' ,
18
+ negativeFeedback = 'negativeFeedback' ,
19
+ }
20
+
15
21
const AlertsQueryEditor = ( props : ScenarioProps < AlertsQuery > ) => {
16
22
const { onRunQuery, datasource, onFormChange } = props ;
17
23
const [ subscribersOptions , setSubscribers ] = useState < SelectableValue [ ] > ( [ ] ) ;
@@ -36,6 +42,19 @@ const AlertsQueryEditor = (props: ScenarioProps<AlertsQuery>) => {
36
42
} ) ;
37
43
} , [ ] ) ;
38
44
45
+ const onFeedbackChange = useCallback ( ( currentMultiValues , selected ) => {
46
+ const selectedValue = selected ?. option ?. value ;
47
+ if ( selectedValue ) {
48
+ if ( selectedValue === FeedbacksEnums . noFeedback ) {
49
+ currentMultiValues = [ selected ?. option ] ;
50
+ }
51
+ if ( [ FeedbacksEnums . positiveFeedback , FeedbacksEnums . negativeFeedback ] . includes ( selectedValue ) ) {
52
+ currentMultiValues = currentMultiValues . filter ( ( v ) => v . value !== FeedbacksEnums . noFeedback ) ;
53
+ }
54
+ }
55
+ return onFormChange ( 'feedback' , currentMultiValues , true ) ;
56
+ } , [ ] ) ;
57
+
39
58
return (
40
59
< >
41
60
< div className = "gf-form gf-form--grow" >
@@ -76,12 +95,7 @@ const AlertsQueryEditor = (props: ScenarioProps<AlertsQuery>) => {
76
95
label = { 'Feedback' }
77
96
value = { query . feedback }
78
97
options = { feedbackOptions }
79
- onChange = { ( currentMultiValues , { option } ) => {
80
- if ( option ?. value === 'noFeedback' ) {
81
- currentMultiValues = [ option ] ;
82
- }
83
- return onFormChange ( 'feedback' , currentMultiValues , true ) ;
84
- } }
98
+ onChange = { onFeedbackChange }
85
99
/>
86
100
</ div >
87
101
< div className = "gf-form-inline" >
0 commit comments