@@ -7,12 +7,14 @@ import {
7
7
MenuToggleElement ,
8
8
Select ,
9
9
SelectOption ,
10
+ Switch ,
10
11
} from '@patternfly/react-core' ;
11
12
12
13
import { useIsAwsBucketValid , useIsAwsCredsPathValid } from './validators' ;
13
14
14
15
import {
15
16
changeAWSBucketName ,
17
+ changeAWSConfig ,
16
18
changeAWSCredsPath ,
17
19
changeAWSRegion ,
18
20
selectAWSBucketName ,
@@ -40,35 +42,58 @@ const AWS_REGIONS = [
40
42
'us-gov-west-1' ,
41
43
] ;
42
44
43
- type FormGroupProps = {
44
- value : string | undefined ;
45
- setValue : ( value : string ) => void ;
45
+ type FormGroupProps < T > = {
46
+ value : T | undefined ;
47
+ onChange : ( value : T ) => void ;
48
+ isDisabled ?: boolean ;
46
49
} ;
47
50
48
- const AWSBucket = ( { value, setValue } : FormGroupProps ) => {
51
+ const AWSConfigToggle = ( { value, onChange } : FormGroupProps < boolean > ) => {
52
+ const handleChange = (
53
+ _event : React . FormEvent < HTMLInputElement > ,
54
+ checked : boolean
55
+ ) => {
56
+ onChange ( checked ) ;
57
+ } ;
58
+
59
+ return (
60
+ < FormGroup label = "Configure AWS Uploads" >
61
+ < Switch
62
+ id = "aws-config-switch"
63
+ ouiaId = "aws-config-switch"
64
+ // empty label so there is no icon
65
+ label = ""
66
+ isChecked = { value }
67
+ onChange = { handleChange }
68
+ />
69
+ </ FormGroup >
70
+ ) ;
71
+ } ;
72
+
73
+ const AWSBucket = ( { value, onChange, isDisabled } : FormGroupProps < string > ) => {
49
74
const isValid = useIsAwsBucketValid ( ) ;
50
75
51
76
return (
52
- < FormGroup label = "AWS Bucket" >
77
+ < FormGroup label = "AWS Bucket" disabled = { isDisabled } >
53
78
< ValidatedInput
54
79
ariaLabel = "aws-bucket"
55
80
value = { value || '' }
56
81
validator = { ( ) => isValid }
57
- onChange = { ( _event , value ) => setValue ( value ) }
82
+ onChange = { ( _event , value ) => onChange ( value ) }
58
83
helperText = "Invalid AWS bucket name"
59
84
/>
60
85
</ FormGroup >
61
86
) ;
62
87
} ;
63
88
64
- const AWSRegion = ( { value, setValue } : FormGroupProps ) => {
89
+ const AWSRegion = ( { value, onChange , isDisabled } : FormGroupProps < string > ) => {
65
90
const [ isOpen , setIsOpen ] = useState ( false ) ;
66
91
67
92
const onSelect = (
68
93
_event : React . MouseEvent < Element , MouseEvent > | undefined ,
69
94
value : string | number | undefined
70
95
) => {
71
- setValue ( value as string ) ;
96
+ onChange ( value as string ) ;
72
97
setIsOpen ( false ) ;
73
98
} ;
74
99
@@ -88,7 +113,7 @@ const AWSRegion = ({ value, setValue }: FormGroupProps) => {
88
113
) ;
89
114
90
115
return (
91
- < FormGroup label = "AWS Region" >
116
+ < FormGroup label = "AWS Region" disabled = { isDisabled } >
92
117
< Select
93
118
isOpen = { isOpen }
94
119
selected = { value }
@@ -107,45 +132,61 @@ const AWSRegion = ({ value, setValue }: FormGroupProps) => {
107
132
) ;
108
133
} ;
109
134
110
- const AWSCredsPath = ( { value, setValue } : FormGroupProps ) => {
135
+ const AWSCredsPath = ( {
136
+ value,
137
+ onChange,
138
+ isDisabled,
139
+ } : FormGroupProps < string > ) => {
111
140
const isValid = useIsAwsCredsPathValid ( ) ;
112
141
113
142
return (
114
- < FormGroup label = "AWS Credentials Filepath" >
143
+ < FormGroup label = "AWS Credentials Filepath" disabled = { isDisabled } >
115
144
< ValidatedInput
116
145
ariaLabel = "aws-creds-path"
117
146
value = { value || '' }
118
147
validator = { ( ) => isValid }
119
- onChange = { ( _event , value ) => setValue ( value ) }
148
+ onChange = { ( _event , value ) => onChange ( value ) }
120
149
helperText = "Invalid filepath for AWS credentials"
121
150
/>
122
151
</ FormGroup >
123
152
) ;
124
153
} ;
125
154
126
- export const AWSConfig = ( ) => {
155
+ // TODO: fix this type
156
+ export const AWSConfig = ( { refetch } : { refetch : any } ) => {
127
157
const dispatch = useAppDispatch ( ) ;
128
158
const bucket = useAppSelector ( selectAWSBucketName ) ;
129
159
const region = useAppSelector ( selectAWSRegion ) ;
130
160
const credentials = useAppSelector ( selectAWSCredsPath ) ;
131
-
132
- // TODO: maybe add a radio button to toggle AWS configuration
133
- // on or off - this might simplify validation & the overall
134
- // experience
161
+ const [ enabled , setEnabled ] = useState < boolean > ( true ) ;
162
+
163
+ const onToggle = async ( v : boolean ) => {
164
+ let awsConfig = undefined ;
165
+ if ( v ) {
166
+ const { data } = await refetch ( ) ;
167
+ awsConfig = data ?. aws ;
168
+ }
169
+ dispatch ( changeAWSConfig ( awsConfig ) ) ;
170
+ setEnabled ( v ) ;
171
+ } ;
135
172
136
173
return (
137
174
< Form >
175
+ < AWSConfigToggle value = { enabled } onChange = { onToggle } />
138
176
< AWSBucket
139
177
value = { bucket }
140
- setValue = { ( v ) => dispatch ( changeAWSBucketName ( v ) ) }
178
+ onChange = { ( v ) => dispatch ( changeAWSBucketName ( v ) ) }
179
+ isDisabled = { ! enabled }
141
180
/>
142
181
< AWSRegion
143
182
value = { region }
144
- setValue = { ( v ) => dispatch ( changeAWSRegion ( v ) ) }
183
+ onChange = { ( v ) => dispatch ( changeAWSRegion ( v ) ) }
184
+ isDisabled = { ! enabled }
145
185
/>
146
186
< AWSCredsPath
147
187
value = { credentials }
148
- setValue = { ( v ) => dispatch ( changeAWSCredsPath ( v ) ) }
188
+ onChange = { ( v ) => dispatch ( changeAWSCredsPath ( v ) ) }
189
+ isDisabled = { ! enabled }
149
190
/>
150
191
</ Form >
151
192
) ;
0 commit comments