import React, { useEffect, useState, useRef, useMemo } from 'react' import { useParams, Link } from 'react-router-dom' import dayjs from 'dayjs' import QRCode from 'qrcode' import { getConfigValue, getNavigationsValue } from '@ijl/cli' import { Box, Breadcrumb, BreadcrumbItem, BreadcrumbLink, Container, HStack, VStack, Heading, } from '@chakra-ui/react' import { QRCanvas, LessonItem, Lessonname, AddMissedButton, UnorderList, BreadcrumbsWrapper, } from './style' import { api } from '../__data__/api/api' import { User } from '../__data__/model' const LessonDetail = () => { const { lessonId, courseId } = useParams() const canvRef = useRef(null) const [lesson, setLesson] = useState(null) const { isFetching, isLoading, data: accessCode, error, isSuccess, } = api.useCreateAccessCodeQuery( { lessonId }, { pollingInterval: Number(getConfigValue('journal.polling-interval')) || 3000, skipPollingIfUnfocused: true, }, ) const AllStudents = api.useCourseAllStudentsQuery(courseId) const [manualAdd, manualAddRqst] = api.useManualAddStudentMutation() const userUrl = useMemo( () => `${location.origin}/journal/u/${lessonId}/${accessCode?.body?._id}`, [accessCode, lessonId], ) useEffect(() => { if (!isFetching && isSuccess) { QRCode.toCanvas( canvRef.current, userUrl, { width: 600 }, function (error) { if (error) console.error(error) console.log('success!') }, ) } }, [isFetching, isSuccess]) const studentsArr = useMemo(() => { let allStudents: (User & { present?: boolean })[] = [ ...(AllStudents.data?.body || []), ].map((st) => ({ ...st, present: false })) let presentStudents: (User & { present?: boolean })[] = [ ...(accessCode?.body.lesson.students || []), ] while (allStudents.length && presentStudents.length) { const student = presentStudents.pop() const present = allStudents.find((st) => st.sub === student.sub) if (present) { present.present = true } else { allStudents.push({ ...student, present: true }) } } return allStudents }, [accessCode?.body, AllStudents.data]) return ( <> Журнал Курс Лекция Тема занятия: {accessCode?.body?.lesson?.name} {dayjs(accessCode?.body?.lesson?.date).format('DD MMMM YYYYг.')}{' '} Отмечено - {accessCode?.body?.lesson?.students?.length}{' '} {AllStudents.isSuccess ? `/ ${AllStudents?.data?.body?.length}` : ''}{' '} человек {studentsArr.map((student) => ( {student.name || student.preferred_username}{' '} {!student.present && ( manualAdd({ lessonId, user: student })} > add )} ))} ) } export default LessonDetail