Skip to content

Commit 5377dc2

Browse files
committed
refactor: remove excess api calls (group selector)
1 parent f2dcc7d commit 5377dc2

4 files changed

Lines changed: 13 additions & 23 deletions

File tree

hwproj.front/src/components/Common/GroupSelector.tsx

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {FC, useEffect, useMemo, useState} from "react";
1+
import {FC, useMemo, useState} from "react";
22
import {
33
Grid,
44
TextField,
@@ -23,6 +23,7 @@ import { Group, AccountDataDto } from "@/api";
2323
interface GroupSelectorProps {
2424
courseId: number,
2525
courseStudents: AccountDataDto[],
26+
groups: Group[],
2627
onGroupIdChange: (groupId?: number) => void,
2728
onGroupsUpdate: () => void,
2829
selectedGroupId?: number,
@@ -31,8 +32,7 @@ interface GroupSelectorProps {
3132
}
3233

3334
const GroupSelector: FC<GroupSelectorProps> = (props) => {
34-
const [groups, setGroups] = useState<Group[]>([]);
35-
const [groupsLoading, setGroupsLoading] = useState(false);
35+
const groups = props.groups || [];
3636
const [isDialogOpen, setIsDialogOpen] = useState(false);
3737
const [formState, setFormState] = useState<{
3838
name: string,
@@ -44,22 +44,6 @@ const GroupSelector: FC<GroupSelectorProps> = (props) => {
4444
const [isSubmitting, setIsSubmitting] = useState(false);
4545
const [isError, setIsError] = useState(false);
4646

47-
const loadGroups = async () => {
48-
setGroupsLoading(true)
49-
try {
50-
const courseGroups = await ApiSingleton.courseGroupsApi.courseGroupsGetAllCourseGroupsWithNames(props.courseId);
51-
setGroups(courseGroups);
52-
} catch (error) {
53-
console.error('Failed to load groups:', error);
54-
setIsError(true);
55-
} finally {
56-
setGroupsLoading(false);
57-
}
58-
}
59-
useEffect(() => {
60-
loadGroups();
61-
}, [props.courseId]);
62-
6347
const handleOpenEditDialog = () => {
6448
const selectedGroup = groups.find(g => g.id === props.selectedGroupId);
6549
setFormState({
@@ -89,7 +73,6 @@ const GroupSelector: FC<GroupSelectorProps> = (props) => {
8973
groupMates: formState.memberIds.map(studentId => ({ studentId })),
9074
}
9175
);
92-
await loadGroups();
9376
props.onGroupsUpdate();
9477
} else {
9578
if (!formState.name.trim() || formState.memberIds.length === 0) {
@@ -101,7 +84,6 @@ const GroupSelector: FC<GroupSelectorProps> = (props) => {
10184
groupMatesIds: formState.memberIds,
10285
courseId: props.courseId,
10386
});
104-
await loadGroups();
10587
props.onGroupsUpdate();
10688
props.onGroupIdChange(groupId);
10789
}
@@ -154,7 +136,6 @@ const GroupSelector: FC<GroupSelectorProps> = (props) => {
154136
onChange={(_, newGroup) => {
155137
props.onGroupIdChange(newGroup?.id)
156138
}}
157-
loading={groupsLoading}
158139
renderInput={(params) => (
159140
<TextField
160141
{...params}

hwproj.front/src/components/Courses/Course.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,7 @@ const Course: React.FC = () => {
406406
}))
407407
}}
408408
onGroupsUpdate={loadGroups}
409+
groups={groups}
409410
/>
410411
}
411412
{tabValue === "stats" &&

hwproj.front/src/components/Courses/CourseExperimental.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as React from "react";
22
import {
33
FileInfoDTO,
4+
Group,
45
HomeworkTaskViewModel,
56
HomeworkViewModel, SolutionDto, StatisticsCourseMatesModel,
67
} from "@/api";
@@ -61,6 +62,7 @@ interface ICourseExperimentalProps {
6162
waitingNewFilesCount: number,
6263
deletingFilesIds: number[]) => void;
6364
onGroupsUpdate: () => void;
65+
groups: Group[];
6466
}
6567

6668
interface ICourseExperimentalState {
@@ -442,6 +444,7 @@ export const CourseExperimental: FC<ICourseExperimentalProps> = (props) => {
442444
isProcessing={props.processingFiles[homework.id!]?.isLoading || false}
443445
onStartProcessing={props.onStartProcessing}
444446
onGroupsUpdate={props.onGroupsUpdate}
447+
groups={props.groups}
445448
/>
446449
</Card>
447450
</Stack>

hwproj.front/src/components/Homeworks/CourseHomeworkExperimental.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import {IFileInfo} from "components/Files/IFileInfo";
1818
import {FC, useEffect, useState} from "react"
1919
import Utils from "services/Utils";
2020
import {
21-
HomeworkViewModel, ActionOptions, HomeworkTaskViewModel, PostTaskViewModel, AccountDataDto
21+
HomeworkViewModel, ActionOptions, HomeworkTaskViewModel, PostTaskViewModel, AccountDataDto,
22+
Group
2223
} from "@/api";
2324
import ApiSingleton from "../../api/ApiSingleton";
2425
import Tags from "../Common/Tags";
@@ -65,6 +66,7 @@ const CourseHomeworkEditor: FC<{
6566
waitingNewFilesCount: number,
6667
deletingFilesIds: number[]) => void;
6768
onGroupsUpdate: () => void;
69+
groups: Group[];
6870
}> = (props) => {
6971
const homework = props.homeworkAndFilesInfo.homework
7072
const isNewHomework = homework.id! < 0
@@ -312,6 +314,7 @@ const CourseHomeworkEditor: FC<{
312314
selectedGroupId={selectedGroupId}
313315
choiceDisabled={!isNewHomework}
314316
onGroupsUpdate={props.onGroupsUpdate}
317+
groups={props.groups}
315318
/>
316319
{tags.includes(TestTag) &&
317320
<Grid item>
@@ -421,6 +424,7 @@ const CourseHomeworkExperimental: FC<{
421424
waitingNewFilesCount: number,
422425
deletingFilesIds: number[]) => void;
423426
onGroupsUpdate: () => void;
427+
groups: Group[];
424428
}> = (props) => {
425429
const {homework, filesInfo} = props.homeworkAndFilesInfo
426430
const deferredTasks = homework.tasks!.filter(t => t.isDeferred!)
@@ -442,6 +446,7 @@ const CourseHomeworkExperimental: FC<{
442446
}}
443447
onStartProcessing={props.onStartProcessing}
444448
onGroupsUpdate={props.onGroupsUpdate}
449+
groups={props.groups}
445450
/>
446451

447452
return <CardContent

0 commit comments

Comments
 (0)