Skip to content

Commit 2ee5ca1

Browse files
janet-barbieTuyisenge2
authored andcommitted
fixing update team info
1 parent 9d93b8f commit 2ee5ca1

File tree

2 files changed

+161
-60
lines changed

2 files changed

+161
-60
lines changed

src/containers/admin-dashBoard/Teams.tsx

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ export interface Team {
3434
name: string;
3535
cohort: Cohort;
3636
ttl: any;
37+
manager: any;
38+
phase: any;
39+
program: any;
3740
}
3841

3942
export const getAllTeam = gql`
@@ -72,6 +75,15 @@ export const getAllTeam = gql`
7275
quality
7376
professional_Skills
7477
}
78+
phase {
79+
name
80+
}
81+
program {
82+
name
83+
}
84+
manager {
85+
email
86+
}
7587
}
7688
7789
getAllCohorts(orgToken: $orgToken) {
@@ -96,6 +108,15 @@ export const getAllTeam = gql`
96108
role
97109
organizations
98110
}
111+
getAllPrograms(orgToken: $orgToken) {
112+
id
113+
name
114+
}
115+
getAllPhases(orgToken: $orgToken) {
116+
id
117+
name
118+
description
119+
}
99120
}
100121
`;
101122

@@ -224,17 +245,16 @@ function AdminTeams() {
224245
}),
225246
},
226247
];
227-
228-
const teamData = getData?.getAllTeams.map(({ name, cohort, ttl }) => ({
229-
name,
230-
cohortName: cohort?.name,
231-
coordinator: cohort?.coordinator?.email
232-
? cohort?.coordinator?.email
233-
: 'Not Assigned',
234-
phase: cohort?.phase.name,
235-
programName: cohort?.program?.name,
236-
ttlEmail: ttl?.profile && ttl.profile.name ? ttl?.email : 'Not Assigned',
237-
}));
248+
const teamData = getData?.getAllTeams.map(
249+
({ name, cohort, ttl, phase, program, manager }) => ({
250+
name,
251+
cohortName: cohort?.name,
252+
coordinator: manager?.email ? manager?.email : cohort?.coordinator?.email,
253+
phase: phase?.name ? phase?.name : cohort?.phase?.name,
254+
programName: program?.name ? program?.name : cohort?.program?.name,
255+
ttlEmail: ttl?.profile && ttl.profile.name ? ttl?.email : 'Not Assigned',
256+
}),
257+
);
238258

239259
return (
240260
<>

src/containers/admin-dashBoard/UpdateTeamModal.tsx

Lines changed: 130 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
3035
export 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

Comments
 (0)