@@ -2,10 +2,18 @@ import FormikResourceSelectorDropdown from "@flanksource-ui/components/Forms/For
2
2
import { Label } from "@flanksource-ui/ui/FormControls/Label" ;
3
3
import { Switch } from "@flanksource-ui/ui/FormControls/Switch" ;
4
4
import { useFormikContext } from "formik" ;
5
- import { useMemo , useState } from "react" ;
5
+ import { useMemo , useState , useEffect } from "react" ;
6
6
7
- export default function FormikNotificationResourceField ( ) {
8
- const { values } = useFormikContext < Record < string , any > > ( ) ;
7
+ type FormikNotificationResourceFieldProps = {
8
+ disabled ?: boolean ;
9
+ onFieldChange ?: ( hasValue : boolean ) => void ;
10
+ } ;
11
+
12
+ export default function FormikNotificationResourceField ( {
13
+ disabled = false ,
14
+ onFieldChange
15
+ } : FormikNotificationResourceFieldProps = { } ) {
16
+ const { values, setFieldValue } = useFormikContext < Record < string , any > > ( ) ;
9
17
10
18
const component_id = values . component_id ;
11
19
const config_id = values . config_id ;
@@ -55,6 +63,12 @@ export default function FormikNotificationResourceField() {
55
63
}
56
64
} , [ switchOption ] ) ;
57
65
66
+ // Monitor field values and call onFieldChange when they change
67
+ useEffect ( ( ) => {
68
+ const hasValue = ! ! ( component_id || config_id || check_id || canary_id ) ;
69
+ onFieldChange ?.( hasValue ) ;
70
+ } , [ component_id , config_id , check_id , canary_id , onFieldChange ] ) ;
71
+
58
72
return (
59
73
< div className = "flex flex-col gap-2" >
60
74
< Label label = "Resource" required = { true } />
@@ -66,38 +80,40 @@ export default function FormikNotificationResourceField() {
66
80
itemsClassName = ""
67
81
defaultValue = "Go Template"
68
82
value = { switchOption }
83
+ disabled = { disabled }
69
84
onChange = { ( v ) => {
70
85
setSwitchOption ( v ) ;
71
86
// clear the other fields if the user selects a different option
72
87
if ( v === "Component" ) {
73
- values . config_id = null ;
74
- values . check_id = null ;
75
- values . canary_id = null ;
88
+ setFieldValue ( ' config_id' , null ) ;
89
+ setFieldValue ( ' check_id' , null ) ;
90
+ setFieldValue ( ' canary_id' , null ) ;
76
91
}
77
92
78
93
if ( v === "Catalog" ) {
79
- values . component_id = null ;
80
- values . check_id = null ;
81
- values . canary_id = null ;
94
+ setFieldValue ( ' component_id' , null ) ;
95
+ setFieldValue ( ' check_id' , null ) ;
96
+ setFieldValue ( ' canary_id' , null ) ;
82
97
}
83
98
84
99
if ( v === "Check" ) {
85
- values . component_id = null ;
86
- values . config_id = null ;
87
- values . canary_id = null ;
100
+ setFieldValue ( ' component_id' , null ) ;
101
+ setFieldValue ( ' config_id' , null ) ;
102
+ setFieldValue ( ' canary_id' , null ) ;
88
103
}
89
104
90
105
if ( v === "Canary" ) {
91
- values . component_id = null ;
92
- values . config_id = null ;
93
- values . check_id = null ;
106
+ setFieldValue ( ' component_id' , null ) ;
107
+ setFieldValue ( ' config_id' , null ) ;
108
+ setFieldValue ( ' check_id' , null ) ;
94
109
}
95
110
} }
96
111
/>
97
112
</ div >
98
113
99
114
< FormikResourceSelectorDropdown
100
115
name = { fieldName . name }
116
+ disabled = { disabled }
101
117
checkResourceSelector = {
102
118
switchOption === "Check" ? [ { id : check_id } ] : undefined
103
119
}
0 commit comments