@@ -7,12 +7,14 @@ import makeStyles from "@material-ui/core/styles/makeStyles"
7
7
import TextField from "@material-ui/core/TextField"
8
8
import { useFormik } from "formik"
9
9
import React from "react"
10
+ import * as Yup from "yup"
10
11
import { getFormHelpers } from "../../util/formUtils"
11
12
import { FormFooter } from "../FormFooter/FormFooter"
12
13
import { FullPageForm } from "../FullPageForm/FullPageForm"
13
14
import { Stack } from "../Stack/Stack"
14
15
15
16
export const Language = {
17
+ errorNoDayOfWeek : "Must set at least one day of week" ,
16
18
daysOfWeekLabel : "Days of Week" ,
17
19
daySundayLabel : "Sunday" ,
18
20
dayMondayLabel : "Monday" ,
@@ -44,6 +46,35 @@ export interface WorkspaceScheduleFormValues {
44
46
ttl : number
45
47
}
46
48
49
+ export const validationSchema = Yup . object ( {
50
+ sunday : Yup . boolean ( ) ,
51
+ monday : Yup . boolean ( ) . test ( "at-least-one-day" , Language . errorNoDayOfWeek , function ( value ) {
52
+ const parent = this . parent as WorkspaceScheduleFormValues
53
+
54
+ if ( ! parent . startTime ) {
55
+ return true
56
+ } else {
57
+ return ! [
58
+ parent . sunday ,
59
+ value ,
60
+ parent . tuesday ,
61
+ parent . wednesday ,
62
+ parent . thursday ,
63
+ parent . friday ,
64
+ parent . saturday ,
65
+ ] . every ( ( day ) => day === false )
66
+ }
67
+ } ) ,
68
+ tuesday : Yup . boolean ( ) ,
69
+ wednesday : Yup . boolean ( ) ,
70
+ thursday : Yup . boolean ( ) ,
71
+ friday : Yup . boolean ( ) ,
72
+ saturday : Yup . boolean ( ) ,
73
+
74
+ startTime : Yup . string ( ) ,
75
+ ttl : Yup . number ( ) . min ( 0 ) . integer ( ) ,
76
+ } )
77
+
47
78
export const WorkspaceScheduleForm : React . FC < WorkspaceScheduleFormProps > = ( { onCancel, onSubmit } ) => {
48
79
const styles = useStyles ( )
49
80
@@ -61,6 +92,7 @@ export const WorkspaceScheduleForm: React.FC<WorkspaceScheduleFormProps> = ({ on
61
92
ttl : 0 ,
62
93
} ,
63
94
onSubmit,
95
+ validationSchema,
64
96
} )
65
97
const formHelpers = getFormHelpers < WorkspaceScheduleFormValues > ( form )
66
98
@@ -85,31 +117,80 @@ export const WorkspaceScheduleForm: React.FC<WorkspaceScheduleFormProps> = ({ on
85
117
86
118
< FormGroup >
87
119
< FormControlLabel
88
- control = { < Checkbox checked = { form . values . sunday } onChange = { form . handleChange } name = "sunday" /> }
120
+ control = {
121
+ < Checkbox
122
+ checked = { form . values . sunday }
123
+ disabled = { ! form . values . startTime }
124
+ onChange = { form . handleChange }
125
+ name = "sunday"
126
+ />
127
+ }
89
128
label = { Language . daySundayLabel }
90
129
/>
91
130
< FormControlLabel
92
- control = { < Checkbox checked = { form . values . monday } onChange = { form . handleChange } name = "monday" /> }
131
+ control = {
132
+ < Checkbox
133
+ checked = { form . values . monday }
134
+ disabled = { ! form . values . startTime }
135
+ onChange = { form . handleChange }
136
+ name = "monday"
137
+ />
138
+ }
93
139
label = { Language . dayMondayLabel }
94
140
/>
95
141
< FormControlLabel
96
- control = { < Checkbox checked = { form . values . tuesday } onChange = { form . handleChange } name = "tuesday" /> }
142
+ control = {
143
+ < Checkbox
144
+ checked = { form . values . tuesday }
145
+ disabled = { ! form . values . startTime }
146
+ onChange = { form . handleChange }
147
+ name = "tuesday"
148
+ />
149
+ }
97
150
label = { Language . dayTuesdayLabel }
98
151
/>
99
152
< FormControlLabel
100
- control = { < Checkbox checked = { form . values . wednesday } onChange = { form . handleChange } name = "wednesday" /> }
153
+ control = {
154
+ < Checkbox
155
+ checked = { form . values . wednesday }
156
+ disabled = { ! form . values . startTime }
157
+ onChange = { form . handleChange }
158
+ name = "wednesday"
159
+ />
160
+ }
101
161
label = { Language . dayWednesdayLabel }
102
162
/>
103
163
< FormControlLabel
104
- control = { < Checkbox checked = { form . values . thursday } onChange = { form . handleChange } name = "thursday" /> }
164
+ control = {
165
+ < Checkbox
166
+ checked = { form . values . thursday }
167
+ disabled = { ! form . values . startTime }
168
+ onChange = { form . handleChange }
169
+ name = "thursday"
170
+ />
171
+ }
105
172
label = { Language . dayThursdayLabel }
106
173
/>
107
174
< FormControlLabel
108
- control = { < Checkbox checked = { form . values . friday } onChange = { form . handleChange } name = "friday" /> }
175
+ control = {
176
+ < Checkbox
177
+ checked = { form . values . friday }
178
+ disabled = { ! form . values . startTime }
179
+ onChange = { form . handleChange }
180
+ name = "friday"
181
+ />
182
+ }
109
183
label = { Language . dayFridayLabel }
110
184
/>
111
185
< FormControlLabel
112
- control = { < Checkbox checked = { form . values . saturday } onChange = { form . handleChange } name = "saturday" /> }
186
+ control = {
187
+ < Checkbox
188
+ checked = { form . values . saturday }
189
+ disabled = { ! form . values . startTime }
190
+ onChange = { form . handleChange }
191
+ name = "saturday"
192
+ />
193
+ }
113
194
label = { Language . daySaturdayLabel }
114
195
/>
115
196
</ FormGroup >
0 commit comments