Files
magistr/frontend/react/admin/testing/render-admin.jsx
dipatrik10 97bf3cc50a feat: завершить миграцию фронтенда на React (этапы 1-5)
Админка, настройки, логин, кабинеты преподавателя и студента
полностью переведены на React 19 (модель strangler, docs/REACT_MIGRATION.md).

- 15 вкладок админки: lazy-загрузка, общий error boundary, сервисный слой
- Удалены legacy-views и переходный слой LegacyTabView (45 файлов)
- Сборка esbuild (frontend/scripts/build-react.mjs) с бюджетами gzip на чанки
- CSP-хэши, кэширование: chunk'и immutable, CSS/HTML no-cache (react-cache.conf)
- Фиксы: lazy-импорт именованных экспортов (краш после авторизации),
  растяжение #admin-root/#settings-root на всю ширину,
  возврат subjects/lessonTypes из справочников (краш просмотра расписаний),
  отказ от заведомо широкого поиска расписания без выбранной цели,
  центрирование карточки логина
- Тесты: 237/237 (npm run check), регрессионные на lazy-вкладки и ширину
- Документация: REACT_MIGRATION.md, REACT_MIGRATION_RESULT.md, FRONTEND.md
2026-09-28 23:15:04 +03:00

84 lines
2.9 KiB
JavaScript

import { createElement } from 'react';
import { renderToStaticMarkup } from 'react-dom/server';
import { AdminWorkspace } from '../AdminApp.jsx';
import { AcademicCalendarTab } from '../tabs/AcademicCalendarTab.jsx';
import { AuditoriumWorkloadTab } from '../tabs/AuditoriumWorkloadTab.jsx';
import { ClassroomsTab } from '../tabs/ClassroomsTab.jsx';
import { DashboardTab } from '../tabs/DashboardTab.jsx';
import { DepartmentWorkspaceTab } from '../tabs/DepartmentWorkspaceTab.jsx';
import { GroupsTab } from '../tabs/GroupsTab.jsx';
import { ScheduleQualityTab } from '../tabs/ScheduleQualityTab.jsx';
import { ScheduleTab } from '../tabs/ScheduleTab.jsx';
import { ScheduleVersionsTab } from '../tabs/ScheduleVersionsTab.jsx';
import { ScheduleViewTab } from '../tabs/ScheduleViewTab.jsx';
import { TeacherAbsencesTab } from '../tabs/TeacherAbsencesTab.jsx';
import { SubjectsTab } from '../tabs/SubjectsTab.jsx';
import { TeacherRequestsTab } from '../tabs/TeacherRequestsTab.jsx';
import { UniversityStructureTab } from '../tabs/UniversityStructureTab.jsx';
import { UsersTab } from '../tabs/UsersTab.jsx';
export function renderAdminWorkspace({ role } = {}) {
return renderToStaticMarkup(createElement(AdminWorkspace, { role: role || 'ADMIN' }));
}
export function renderClassroomsTab() {
return renderToStaticMarkup(createElement(ClassroomsTab));
}
export function renderSubjectsTab() {
return renderToStaticMarkup(createElement(SubjectsTab));
}
export function renderDashboardTab() {
return renderToStaticMarkup(createElement(DashboardTab));
}
export function renderUsersTab() {
return renderToStaticMarkup(createElement(UsersTab));
}
export function renderGroupsTab() {
return renderToStaticMarkup(createElement(GroupsTab));
}
export function renderUniversityStructureTab() {
return renderToStaticMarkup(createElement(UniversityStructureTab));
}
export function renderTeacherRequestsTab() {
return renderToStaticMarkup(createElement(TeacherRequestsTab));
}
export function renderDepartmentWorkspaceTab() {
return renderToStaticMarkup(createElement(DepartmentWorkspaceTab));
}
export function renderAuditoriumWorkloadTab() {
return renderToStaticMarkup(createElement(AuditoriumWorkloadTab));
}
export function renderAcademicCalendarTab() {
return renderToStaticMarkup(createElement(AcademicCalendarTab));
}
export function renderScheduleViewTab() {
return renderToStaticMarkup(createElement(ScheduleViewTab));
}
export function renderScheduleTab() {
return renderToStaticMarkup(createElement(ScheduleTab));
}
export function renderScheduleVersionsTab() {
return renderToStaticMarkup(createElement(ScheduleVersionsTab));
}
export function renderScheduleQualityTab() {
return renderToStaticMarkup(createElement(ScheduleQualityTab));
}
export function renderTeacherAbsencesTab() {
return renderToStaticMarkup(createElement(TeacherAbsencesTab));
}