Skip to content

Commit

Permalink
merge mian
Browse files Browse the repository at this point in the history
  • Loading branch information
SzymonMrzyglod committed Jun 3, 2024
2 parents ed1c42d + f0297d6 commit c08dcff
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 47 deletions.
3 changes: 2 additions & 1 deletion src/components/SemesterSelect/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ export const SemesterSelect: React.FC<{
>
{semesters.map((item) => (
<Select.Option key={item.id} value={item.id}>
{`${item.name} ${item.speciality ? ` (${item.speciality})` : ''}`}
{item.name}
{!!item.speciality && ` (${item.speciality})`}
</Select.Option>
))}
</Select>
Expand Down
3 changes: 2 additions & 1 deletion src/pages/Roles/components/CustomCheckbox/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,11 @@ import {
UserOutlined,
} from '@ant-design/icons';
import { Checkbox } from 'antd';
import type { CheckboxValueType } from 'antd/es/checkbox/Group';
import React, { useEffect, useState } from 'react';
import './index.css';

type CheckboxValueType = string | number | boolean;

interface Props {
name: string;
nameKey: string;
Expand Down
3 changes: 2 additions & 1 deletion src/pages/Roles/form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ import { useEffect, useMemo, useRef, useState } from 'react';
import { useCallback } from 'react';
import { FormattedMessage, useParams } from 'umi';

import type { CheckboxValueType } from 'antd/lib/checkbox/Group';
import './index.css';

import { getTranslationRetrieve } from '@/services/escola-lms/translations';
import CustomCheckbox from './components/CustomCheckbox';

type CheckboxValueType = string | number | boolean;

export default () => {
const params = useParams<{ name: string }>();
const { name } = params;
Expand Down
7 changes: 5 additions & 2 deletions src/pages/TeacherSubjects/components/ClassRegister/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -212,9 +212,12 @@ export const ClassRegister: React.FC = () => {
.reduce<ClassRegisterTableItem[]>(
(acc, { id, academic_teacher_id, first_name, last_name }) => {
const studentFullName = `${last_name} ${first_name}`;
// filter out tutor & first name and second name filter
const studentInFinalGrades = finalGradesRes.data.some(
(teacher) => teacher.user.id === id,
);

if (
academic_teacher_id !== null ||
(academic_teacher_id !== null && !studentInFinalGrades) ||
!studentFullName.toLowerCase().includes(full_name.toLowerCase())
)
return acc;
Expand Down
58 changes: 35 additions & 23 deletions src/pages/TeacherSubjects/components/ConvertGradesModal.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import SecureUpload from '@/components/SecureUpload';
import { ExamGradeType } from '@/services/escola-lms/enums';
import { getGroupFinalGrades as fetchGroupFinalGrades } from '@/services/escola-lms/grades';
import { InfoCircleOutlined } from '@ant-design/icons';
import ProForm from '@ant-design/pro-form';
import { Button, Image, Modal, Select, Space, Tooltip } from 'antd';
import type { DefaultOptionType } from 'antd/lib/select';
import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { FormattedMessage } from 'umi';

import SecureUpload from '@/components/SecureUpload';
import { ExamGradeType } from '@/services/escola-lms/enums';
import { useTeacherSubject } from '../context';

const checkManualExamType = (type: ExamGradeType) =>
Expand Down Expand Up @@ -91,30 +91,42 @@ const ManualExamGradeType: React.FC<{
);

const onSelectedGroupChange = useCallback(
(group_id: number) => {
async (group_id: number) => {
setSelectedGroup(group_id);
const currGroup = groupUsers.byId?.[group_id];
if (!currGroup) return;

const exam_results = currGroup.users.reduce<API.ExamResult[]>(
(acc, { id, email, first_name, last_name, academic_teacher_id }) => {
// filter out tutors
if (academic_teacher_id !== null) return acc;

return [
...acc,
{
email,
first_name,
last_name,
user_id: id,
result: null,
},
];
},
[],
);
onDataConverted({ group_id, exam_results });
try {
const finalGradesRes = await fetchGroupFinalGrades([group_id]);
if (!finalGradesRes.success) return;

const exam_results = currGroup.users.reduce<API.ExamResult[]>(
(acc, { id, email, first_name, last_name, academic_teacher_id }) => {
const studentInFinalGrades = finalGradesRes.data.some(
(teacher) => teacher.user.id === id,
);

// filter out tutors
if (academic_teacher_id !== null && !studentInFinalGrades) return acc;

return [
...acc,
{
email,
first_name,
last_name,
user_id: id,
result: null,
},
];
},
[],
);

onDataConverted({ group_id, exam_results });
} catch (error) {
console.error('Error fetching final grades:', error);
}
},
[groupUsers.byId],
);
Expand Down
49 changes: 30 additions & 19 deletions src/pages/TeacherSubjects/components/Students.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { getGroupFinalGrades as fetchGroupFinalGrades } from '@/services/escola-lms/grades';
import ProTable, { type ProColumns } from '@ant-design/pro-table';
import type { DefaultOptionType } from 'antd/lib/select';
import React, { useMemo } from 'react';
Expand Down Expand Up @@ -56,25 +57,30 @@ const getGroupsOptions = (subjectGroups: API.SubjectGroups[]): DefaultOptionType
value: id,
}));

const getTableData = (studentUserGroups: API.StudentUserGroup[]): TableDataProps[] =>
const getTableData = (
studentUserGroups: API.StudentUserGroup[],
finalGrades: API.FinalGradeItem[],
): TableDataProps[] =>
studentUserGroups.reduce<TableDataProps[]>((acc, curr) => {
const userTable = curr?.users?.reduce<TableDataProps[]>(
(innerAcc, currentUser) =>
currentUser.academic_teacher_id !== null
? innerAcc
: [
...innerAcc,
{
group_id: curr.id,
group_name: curr.name,
user_id: currentUser.id,
first_name: currentUser.first_name,
last_name: currentUser.last_name,
email: currentUser.email,
},
],
[],
);
if (!curr?.users) return acc;

const userTable = curr.users.reduce<TableDataProps[]>((innerAcc, currentUser) => {
const studentInFinalGrades = finalGrades.some((grade) => grade.user.id === currentUser.id);

return currentUser.academic_teacher_id !== null && !studentInFinalGrades
? innerAcc
: [
...innerAcc,
{
group_id: curr.id,
group_name: curr.name,
user_id: currentUser.id,
first_name: currentUser.first_name,
last_name: currentUser.last_name,
email: currentUser.email,
},
];
}, []);

return [...acc, ...userTable];
}, []);
Expand Down Expand Up @@ -103,7 +109,12 @@ export const Students: React.FC = () => {
return { data: [], total: 0, success: false };
}

const tableData = getTableData(response.data).filter(
const finalGradesRes = await fetchGroupFinalGrades(response.data.map((group) => group.id));
if (!finalGradesRes.success) {
return { data: [], success: false };
}

const tableData = getTableData(response.data, finalGradesRes.data).filter(
(record) =>
record.first_name.toLowerCase().includes(first_name.toLowerCase()) &&
record.last_name.toLowerCase().includes(last_name.toLowerCase()) &&
Expand Down

0 comments on commit c08dcff

Please sign in to comment.