diff --git a/src/pages/lesson-details.tsx b/src/pages/lesson-details.tsx index 87d83d4..c405320 100644 --- a/src/pages/lesson-details.tsx +++ b/src/pages/lesson-details.tsx @@ -72,17 +72,50 @@ const LessonDetail = () => { useEffect(() => { if (!isFetching && isSuccess) { - QRCode.toCanvas( - canvRef.current, - userUrl, - { width: 600 }, - function (error) { - if (error) console.error(error) - console.log('success!') - }, - ) + const generateQRCode = () => { + if (!canvRef.current) return; + + // Получаем текущую ширину канваса, гарантируя квадратный QR-код + const canvas = canvRef.current; + const containerWidth = canvas.clientWidth; + + // Очищаем canvas перед новой генерацией + const ctx = canvas.getContext('2d'); + ctx.clearRect(0, 0, canvas.width, canvas.height); + + // Устанавливаем одинаковые размеры для ширины и высоты (1:1) + canvas.width = containerWidth; + canvas.height = containerWidth; + + QRCode.toCanvas( + canvas, + userUrl, + { + width: containerWidth, + margin: 1 // Небольшой отступ для лучшей читаемости + }, + function (error) { + if (error) console.error(error) + console.log('success!') + }, + ) + } + + // Генерируем QR-код + generateQRCode(); + + // Перегенерируем при изменении размера окна + const handleResize = () => { + generateQRCode(); + }; + + window.addEventListener('resize', handleResize); + + return () => { + window.removeEventListener('resize', handleResize); + }; } - }, [isFetching, isSuccess]) + }, [isFetching, isSuccess, userUrl]) const studentsArr = useMemo(() => { let allStudents: (User & { present?: boolean })[] = [ @@ -146,10 +179,12 @@ const LessonDetail = () => { {t('journal.pl.common.people')} - - - - + + + + + + {isTeacher(user) && studentsArr.map((student) => (