Основные изменения: Админ-панель: - Создана защищенная паролем админ-панель по пути /admin - Реализована система авторизации с сессионными куками - Добавлен CRUD для управления группами (создание, редактирование, удаление) - Добавлено поле "курс" (1-5) для каждой группы с возможностью редактирования Структура данных: - Миграция групп из TypeScript файла в JSON формат (groups.json) - Обновлена структура данных: добавлено поле course - Реализована автоматическая миграция старых данных в новый формат - Создан groups-loader для работы с JSON файлом Главная страница: - Создана главная страница с аккордеоном по курсам (1-5) - Группы сгруппированы по курсам для удобной навигации - Добавлены кнопки: "Добавить группу", переключение темы и GitHub - Убрана верхняя навигация с главной страницы Навигация: - Добавлена кнопка "К группам" в начало навигации на страницах расписания - На мобильных устройствах скрыты кнопки групп, оставлена только кнопка возврата - Улучшена адаптивность навигации Технические улучшения: - Исправлена проблема с tailwind-scrollbar-hide (заменен плагин на CSS класс) - Обновлены все компоненты для работы с новой структурой данных групп - Добавлена поддержка переменных окружения ADMIN_PASSWORD и ADMIN_SESSION_SECRET
19 lines
797 B
TypeScript
19 lines
797 B
TypeScript
// Загружаем группы из JSON файла только на сервере
|
||
// На клиенте будет пустой объект, группы должны передаваться через props
|
||
let groups: { [group: string]: [number, string] } = {}
|
||
|
||
// Используем условный require только на сервере для избежания включения fs в клиентскую сборку
|
||
if (typeof window === 'undefined') {
|
||
// Серверная сторона
|
||
try {
|
||
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
||
const groupsLoader = require('./groups-loader')
|
||
groups = groupsLoader.loadGroups()
|
||
} catch (error) {
|
||
console.error('Error loading groups:', error)
|
||
groups = {}
|
||
}
|
||
}
|
||
|
||
export { groups }
|