@@ -5,7 +5,7 @@ import { get } from 'lodash'
5
5
import styles from './ProjectForm.module.scss'
6
6
import { PrimaryButton } from '../Buttons'
7
7
import Select from '../Select'
8
- import { PROJECT_STATUSES , DEFAULT_NDA_UUID } from '../../config/constants'
8
+ import { PROJECT_STATUSES , PROJECT_STATUS , DEFAULT_NDA_UUID } from '../../config/constants'
9
9
import GroupsFormField from './GroupsFormField'
10
10
11
11
const ProjectForm = ( {
@@ -24,11 +24,13 @@ const ProjectForm = ({
24
24
handleSubmit,
25
25
control,
26
26
reset,
27
- formState : { isDirty, errors }
27
+ formState : { isDirty, errors } ,
28
+ watch
28
29
} = useForm ( {
29
30
defaultValues : {
30
31
projectName : isEdit ? projectDetail . name : '' ,
31
32
description : isEdit ? projectDetail . description : '' ,
33
+ cancelReason : null ,
32
34
status : isEdit
33
35
? PROJECT_STATUSES . find ( ( item ) => item . value === projectDetail . status ) ||
34
36
null
@@ -41,17 +43,22 @@ const ProjectForm = ({
41
43
}
42
44
} )
43
45
46
+ const projectStatus = watch ( 'status' )
47
+ const isProjectCancelled = get ( projectStatus , 'value' ) === PROJECT_STATUS . CANCELLED
48
+
44
49
// Handle form submission
45
50
const onSubmit = async ( data ) => {
46
51
// indicate that creating process has started
47
52
setIsSaving ( true )
48
53
49
54
try {
55
+ const status = canManage ? ( data . status || { } ) . value : undefined
50
56
const payload = {
51
57
name : data . projectName ,
52
58
description : data . description ,
53
59
type : data . projectType . value ,
54
- status : canManage ? ( data . status || { } ) . value : undefined ,
60
+ status,
61
+ cancelReason : status === PROJECT_STATUS . CANCELLED ? data . cancelReason : undefined ,
55
62
groups : data . groups ,
56
63
terms : data . terms ? [ data . terms ] : [ ]
57
64
}
@@ -142,6 +149,35 @@ const ProjectForm = ({
142
149
</ div >
143
150
</ div >
144
151
) }
152
+ { isEdit && isProjectCancelled && (
153
+ < Controller
154
+ name = 'cancelReason'
155
+ control = { control }
156
+ rules = { { required : 'Please provide a cancellation reason' } }
157
+ render = { ( { field } ) => (
158
+ < div className = { cn ( styles . row ) } >
159
+ < div className = { cn ( styles . formLabel , styles . field ) } >
160
+ < label label htmlFor = 'status' >
161
+ Cancel reason < span > *</ span > :
162
+ </ label >
163
+ </ div >
164
+ < div className = { cn ( styles . field , styles . formField ) } >
165
+ < input
166
+ className = { styles . projectName }
167
+ id = 'cancelReason'
168
+ placeholder = 'Reason'
169
+ { ...field }
170
+ />
171
+ { errors . projectStatus && (
172
+ < div className = { cn ( styles . error ) } >
173
+ { errors . projectStatus . message }
174
+ </ div >
175
+ ) }
176
+ </ div >
177
+ </ div >
178
+ ) }
179
+ />
180
+ ) }
145
181
{ ! isEdit && (
146
182
< div className = { cn ( styles . row ) } >
147
183
< div className = { cn ( styles . formLabel , styles . field ) } >
0 commit comments