Skip to content

Commit 3f42b98

Browse files
authored
fix editing team details (#474)
* normalize judge before editing fix * added scroll to top when edit team * fix table number and team key * fix team and judge id swap
1 parent d037667 commit 3f42b98

4 files changed

Lines changed: 42 additions & 15 deletions

File tree

app/(api)/_actions/teams/updateTeamWithJudges.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ export async function updateTeamWithJudges(
161161
}
162162

163163
const deleteSubmissionResList = await Promise.all(
164-
deleteList.map((judge_id) => removeJudgeFromTeam(judge_id, team_id))
164+
deleteList.map((judge_id) => removeJudgeFromTeam(team_id, judge_id))
165165
);
166166
if (!deleteSubmissionResList.every((res: any) => res.ok)) {
167167
throw new Error(

app/(pages)/admin/_components/Judges/JudgeCard.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,11 @@ export default function JudgeCard({
5959
))}
6060
</div>
6161
<div className={styles.teams_container}>
62-
{judge.teams.map((team: Team) => (
63-
<div key={team._id} className={styles.team}>
62+
{judge.teams.map((team: Team, index: number) => (
63+
<div
64+
key={team._id ? team._id : `${team.name ?? 'team'}-${index}`}
65+
className={styles.team}
66+
>
6467
{team.name}
6568
</div>
6669
))}

app/(pages)/admin/_components/Teams/TeamForm.tsx

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,25 @@ export default function TeamForm({
4242
judges.body.map((judge: any) => [judge._id, judge])
4343
);
4444

45-
if (data?._id) {
46-
data.judges = data.judges.map((judge: any) => {
47-
return judgeMap[judge._id];
48-
});
49-
}
45+
const normalizeJudges = (incomingJudges: any[] = []) =>
46+
incomingJudges
47+
.map((judge: any) => {
48+
const judgeId = typeof judge === 'string' ? judge : judge?._id;
49+
if (!judgeId) return null;
50+
return judgeMap[judgeId] ?? null;
51+
})
52+
.filter((judge): judge is User => Boolean(judge));
53+
54+
const normalizedJudges = normalizeJudges(data?.judges ?? []);
5055

5156
const onSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
5257
event.preventDefault();
5358

59+
const formData: any = {
60+
...data,
61+
judges: normalizeJudges(data?.judges ?? []),
62+
};
63+
5464
try {
5565
const verificationList = [
5666
{
@@ -59,7 +69,8 @@ export default function TeamForm({
5969
},
6070
{
6171
field: 'tableNumber',
62-
validation: Number.isFinite,
72+
validation: (tableNumber: any) =>
73+
typeof tableNumber === 'string' && tableNumber.trim().length > 0,
6374
},
6475
{
6576
field: 'name',
@@ -85,7 +96,7 @@ export default function TeamForm({
8596
];
8697

8798
verificationList.forEach(({ field, validation }) => {
88-
if (!validation(data?.[field])) {
99+
if (!validation(formData?.[field])) {
89100
throw new Error(`Form field ${field} failed validation.`);
90101
}
91102
});
@@ -95,7 +106,7 @@ export default function TeamForm({
95106
return;
96107
}
97108

98-
const { _id, submissions: _, judges, ...body } = data;
109+
const { _id, submissions: _, judges, ...body } = formData;
99110

100111
let team_id = _id;
101112
if (!team_id) {
@@ -137,9 +148,9 @@ export default function TeamForm({
137148
required
138149
/>
139150
<ShortInput
140-
type="number"
151+
type="text"
141152
label="table number"
142-
value={!isNaN(data.tableNumber) ? data.tableNumber : null}
153+
value={data.tableNumber ?? ''}
143154
updateValue={(newTableNumber) =>
144155
updateField('tableNumber', newTableNumber)
145156
}
@@ -176,7 +187,7 @@ export default function TeamForm({
176187
/>
177188
<ListInput
178189
label="judges"
179-
value={data.judges}
190+
value={normalizedJudges}
180191
direction="column"
181192
updateValue={(value: any) => updateField('judges', value)}
182193
itemRenderer={({ key, item, deleteItem, shiftUp, shiftDown }) => {

app/(pages)/admin/teams/page.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,16 @@ export default function Teams() {
5555
(team) => team.reports?.length > 0 && team.active
5656
);
5757

58+
const handleEditTeam = (team: TeamWithJudges) => {
59+
setData(team);
60+
window.scrollTo({ top: 0, behavior: 'smooth' });
61+
62+
const listContainer = document.querySelector(
63+
`.${styles.teams_list}`
64+
) as HTMLElement | null;
65+
listContainer?.scrollTo({ top: 0, behavior: 'smooth' });
66+
};
67+
5868
return (
5969
<div className={styles.container}>
6070
<h1 className={styles.page_title}>Team Manager</h1>
@@ -127,7 +137,10 @@ export default function Teams() {
127137
className={styles.team_card_wrapper}
128138
key={team._id}
129139
>
130-
<TeamCard team={team} onEditClick={() => setData(team)} />
140+
<TeamCard
141+
team={team}
142+
onEditClick={() => handleEditTeam(team)}
143+
/>
131144
</div>
132145
))}
133146
</div>

0 commit comments

Comments
 (0)