@@ -14,19 +14,24 @@ export const UpdateTeam = gql`
1414 $cohort: String
1515 $TTL: String
1616 $orgToken: String
17+ $manager: String
18+ $phase: String
19+ $program: String
1720 ) {
1821 updateTeam(
1922 id: $updateTeamId
2023 orgToken: $orgToken
2124 name: $name
2225 cohort: $cohort
2326 TTL: $TTL
27+ manager: $manager
28+ phase: $phase
29+ program: $program
2430 ) {
2531 name
2632 }
2733 }
2834` ;
29-
3035export default function UpdateTeamModal ( {
3136 data,
3237 updateTeamModal,
@@ -37,6 +42,8 @@ export default function UpdateTeamModal({
3742 data ?: {
3843 getAllTeams : Team [ ] ;
3944 getAllCohorts : Cohort [ ] ;
45+ getAllPrograms ?: any [ ] ;
46+ getAllPhases ?: any [ ] ;
4047 getAllUsers : any ;
4148 } ;
4249 updateTeamModal : boolean ;
@@ -47,7 +54,6 @@ export default function UpdateTeamModal({
4754 const { t } = useTranslation ( ) ;
4855 const {
4956 handleSubmit,
50- watch,
5157 formState : { errors } ,
5258 reset,
5359 register,
@@ -65,29 +71,29 @@ export default function UpdateTeamModal({
6571 } ,
6672 } ) ;
6773 const orgToken = localStorage . getItem ( 'orgToken' ) ;
68-
6974 async function updateTeam ( data : any ) {
7075 const newData : any = { ...data } ;
71-
76+ // Process the select fields
77+ newData . manager && ( newData . manager = newData . manager . value ) ;
78+ newData . program && ( newData . program = newData . program . value ) ;
79+ newData . phase && ( newData . phase = newData . phase . value ) ;
7280 newData . coordinatorEmail &&
7381 ( newData . coordinatorEmail = newData . coordinatorEmail . value ) ;
7482 newData . programName && ( newData . programName = newData . programName . value ) ;
75-
83+ // Clean up empty fields
7684 Object . keys ( newData ) . forEach ( ( field ) => {
7785 if ( ! newData [ field ] || newData [ field ] === '' ) {
7886 delete newData [ field ] ;
7987 }
8088 } ) ;
81-
8289 newData . cohort && ( newData . cohort = newData . cohort . value ) ;
8390 newData . TTL && ( newData . TTL = newData . TTL . value ) ;
8491 newData . updateTeamId = currentTeam ?. id ;
8592 orgToken && ( newData . orgToken = orgToken ) ;
86-
8793 await updateTeamMutation ( { variables : newData } ) ;
8894 }
89-
9095 useEffect ( ( ) => {
96+ // Set form values when the modal opens
9197 setValue ( 'name' , currentTeam ?. name ) ;
9298 setValue ( 'TTL' , {
9399 value : currentTeam ?. ttl ?. email ,
@@ -97,8 +103,29 @@ export default function UpdateTeamModal({
97103 value : currentTeam ?. cohort ?. name ,
98104 label : currentTeam ?. cohort ?. name || 'no cohort assigned' ,
99105 } ) ;
106+ setValue ( 'manager' , {
107+ value : currentTeam ?. manager ?. email ,
108+ label :
109+ currentTeam ?. manager ?. email || currentTeam ?. cohort ?. coordinator ?. email ,
110+ } ) ;
111+ setValue ( 'phase' , {
112+ value : currentTeam ?. phase ?. name
113+ ? currentTeam ?. phase ?. name
114+ : currentTeam ?. cohort ?. phase ?. name ,
115+ label : currentTeam ?. phase ?. name
116+ ? currentTeam ?. phase ?. name
117+ : currentTeam ?. cohort ?. phase ?. name || 'no phase assigned' ,
118+ } ) ;
119+ // setValue('phase', currentTeam?.phase);
120+ setValue ( 'program' , {
121+ value : currentTeam ?. program ?. name
122+ ? currentTeam ?. program ?. name
123+ : currentTeam ?. cohort ?. program ?. name ,
124+ label : currentTeam ?. program ?. name
125+ ? currentTeam ?. program ?. name
126+ : currentTeam ?. cohort ?. program ?. name || 'no program assigned' ,
127+ } ) ;
100128 } , [ currentTeam , updateTeamModal ] ) ;
101-
102129 return (
103130 < div
104131 className = { `h-screen w-screen bg-black fixed top-0 left-0 bg-opacity-30 backdrop-blur-sm flex items-center justify-center z-20 overflow-auto p-4 ${
@@ -111,54 +138,50 @@ export default function UpdateTeamModal({
111138 < h3 className = "w-11/12 text-sm font-bold text-center uppercase dark:text-white" >
112139 { t ( 'Update Team' ) }
113140 </ h3 >
114- < hr className = "w-full my-3 border-b bg-primary" />
141+ < hr className = "w-full my-3 border-b bg-primary" />
115142 </ div >
116143 < div className = "card-body" >
117144 < form className = "px-8 py-3 " >
118- < div className = "my-5 input h-9 " >
119- < div className = "flex items-center w-full h-full rounded-md grouped-input" >
120- < input
121- type = "text"
122- className = "w-full px-5 py-2 font-sans text-xs border rounded outline-none border-primary dark:bg-dark-frame-bg dark:text-white"
123- placeholder = { t ( 'name' ) }
124- { ...register ( 'name' ) }
125- />
126- </ div >
145+ { /* Team Name */ }
146+ < div className = "my-5 input h-9" >
147+ < input
148+ type = "text"
149+ className = "w-full px-5 py-2 font-sans text-xs border rounded outline-none border-primary dark:bg-dark-frame-bg dark:text-white"
150+ placeholder = { t ( 'name' ) }
151+ { ...register ( 'name' ) }
152+ />
127153 { errors ?. name && (
128154 < p className = "font-thin text-[12px] text-red-300" >
129155 { errors ?. name ?. message ?. toString ( ) }
130156 </ p >
131157 ) }
132158 </ div >
159+ { /* TTL Email */ }
133160 < div className = "my-5 input h-9" >
134- < div className = "flex items-center w-full h-full rounded-md grouped-input" >
135- < ControlledSelect
136- placeholder = { t ( 'email' ) }
137- register = { {
138- control,
139- name : 'TTL' ,
140- rules : {
141- required : `${ t ( 'The ttl email is required' ) } ` ,
142- } ,
143- } }
144- options = {
145- data ?. getAllUsers
146- ?. filter ( ( user : any ) => user . role === 'ttl' )
147- ?. map ( ( user : any ) => ( {
148- value : user . email ,
149- label : user . email ,
150- } ) ) ?? [ ]
151- }
152- />
153- </ div >
154- { errors ?. ttlEmail && (
161+ < ControlledSelect
162+ placeholder = { t ( 'email' ) }
163+ register = { {
164+ control,
165+ name : 'TTL' ,
166+ rules : { required : `${ t ( 'The ttl email is required' ) } ` } ,
167+ } }
168+ options = {
169+ data ?. getAllUsers
170+ ?. filter ( ( user : any ) => user . role === 'ttl' )
171+ ?. map ( ( user : any ) => ( {
172+ value : user . email ,
173+ label : user . email ,
174+ } ) ) ?? [ ]
175+ }
176+ />
177+ { errors ?. TTL && (
155178 < p className = "font-thin text-[12px] text-red-300" >
156- { errors ?. ttlEmail ?. message ?. toString ( ) }
179+ { errors ?. TTL ?. message ?. toString ( ) }
157180 </ p >
158181 ) }
159182 </ div >
160-
161- < div className = "my-5 input h-9 " >
183+ { /* Cohort */ }
184+ < div className = "my-5 input h-9" >
162185 < ControlledSelect
163186 placeholder = { t ( 'Choose a Cohort' ) }
164187 register = { {
@@ -171,13 +194,72 @@ export default function UpdateTeamModal({
171194 label : name ,
172195 } ) ) }
173196 />
174- { errors ?. programName && (
197+ { errors ?. cohort && (
198+ < p className = "font-thin text-[12px] text-red-300" >
199+ { errors ?. cohort ?. message ?. toString ( ) }
200+ </ p >
201+ ) }
202+ </ div >
203+ { /* Manager */ }
204+ < div className = "my-5 input h-9" >
205+ < ControlledSelect
206+ placeholder = { t ( 'Manager' ) }
207+ register = { {
208+ control,
209+ name : 'manager' ,
210+ rules : { required : `${ t ( 'Manager is required' ) } ` } ,
211+ } }
212+ options = {
213+ data ?. getAllUsers
214+ ?. filter ( ( user : any ) => user . role === 'coordinator' )
215+ ?. map ( ( user : any ) => ( {
216+ value : user . email ,
217+ label : user . email ,
218+ } ) ) ?? [ ]
219+ }
220+ />
221+ { errors ?. manager && (
175222 < p className = "font-thin text-[12px] text-red-300" >
176- { errors ?. programName ?. message ?. toString ( ) }
223+ { errors ?. manager ?. message ?. toString ( ) }
177224 </ p >
178225 ) }
179226 </ div >
227+ { /* Phase */ }
180228
229+ < div className = "my-5 input h-9" >
230+ < ControlledSelect
231+ placeholder = { t ( 'Phases' ) }
232+ register = { {
233+ control,
234+ name : 'phase' , // Ensure this matches your backend mutation variable
235+ rules : { required : `${ t ( 'Phase is required' ) } ` } ,
236+ } }
237+ options = { data ?. getAllPhases ?. map ( ( { id, name } ) => ( {
238+ value : id ,
239+ label : name ,
240+ } ) ) }
241+ />
242+ </ div >
243+ { /* Program */ }
244+ < div className = "my-5 input h-9" >
245+ < ControlledSelect
246+ placeholder = { t ( 'Program' ) }
247+ register = { {
248+ control,
249+ name : 'program' ,
250+ rules : { required : `${ t ( 'Program is required' ) } ` } ,
251+ } }
252+ options = { data ?. getAllPrograms ?. map ( ( { name } ) => ( {
253+ value : name ,
254+ label : name ,
255+ } ) ) }
256+ />
257+ { errors ?. program && (
258+ < p className = "font-thin text-[12px] text-red-300" >
259+ { errors ?. program ?. message ?. toString ( ) }
260+ </ p >
261+ ) }
262+ </ div >
181263 < div className = "flex justify-between w-full" >
182264 < Button
183265 variant = "info"
@@ -190,18 +272,17 @@ export default function UpdateTeamModal({
190272 } }
191273 disabled = { loading }
192274 >
193- { ' ' }
194275 { t ( 'Cancel' ) }
195276 </ Button >
196277 < Button
197278 variant = "primary"
198279 size = "sm"
199- style = "w-[30%] md:w-1/4 text-sm font-sans p-0"
280+ style = "w-[30%] md:w-1/4 text-sm font-sans"
281+ data-testid = "updateTeam"
200282 onClick = { handleSubmit ( updateTeam ) }
201283 loading = { loading }
202- data-testid = "confirmUpdateBtn"
284+ disabled = { loading }
203285 >
204- { ' ' }
205286 { t ( 'Save' ) }
206287 </ Button >
207288 </ div >
0 commit comments