feat: добавлено предупреждение о fallback кэше и debug опции
Основные изменения: - Предупреждение о неактуальности расписания: * Добавлен баннер предупреждения при использовании fallback кэша * Добавлено toast уведомление о возможной неактуальности данных * Баннер показывает возраст кэша в удобочитаемом формате * Автоскролл с учетом рендеринга баннера - Debug опции в админ-панели: * Добавлена секция с аккордеоном для debug опций (только в dev режиме) * Опции: принудительное использование кэша, пустое расписание, ошибка, таймаут, информация о кэше * Все опции с тумблерами для удобного управления * API endpoint обновлен для поддержки debug настроек - Структурные изменения: * Создан компонент Accordion для shadcn/ui * Расширены типы AppSettings для поддержки debug опций * Компонент баннера размещен внутри Schedule компонента (следуя правилам проекта) * Добавлен файл .cursorrules с правилами для AI ассистента - Исправления: * Исправлена сериализация undefined значений в getServerSideProps * Улучшена логика автоскролла при использовании fallback кэша * Убраны лишние отступы у баннера предупреждения - Зависимости: * Добавлен @radix-ui/react-accordion для компонента аккордеона - Прочие изменения: * Обновлены настройки в settings.json * Изменения в старых файлах (old/README.md, old/old-schedule.txt) * Обновления в API endpoints админ-панели
This commit is contained in:
@@ -3,6 +3,13 @@ import path from 'path'
|
||||
|
||||
export type AppSettings = {
|
||||
weekNavigationEnabled: boolean
|
||||
debug?: {
|
||||
forceCache?: boolean
|
||||
forceEmpty?: boolean
|
||||
forceError?: boolean
|
||||
forceTimeout?: boolean
|
||||
showCacheInfo?: boolean
|
||||
}
|
||||
}
|
||||
|
||||
let cachedSettings: AppSettings | null = null
|
||||
@@ -10,7 +17,14 @@ let cachedSettingsPath: string | null = null
|
||||
let cachedSettingsMtime: number | null = null
|
||||
|
||||
const defaultSettings: AppSettings = {
|
||||
weekNavigationEnabled: true
|
||||
weekNavigationEnabled: true,
|
||||
debug: {
|
||||
forceCache: false,
|
||||
forceEmpty: false,
|
||||
forceError: false,
|
||||
forceTimeout: false,
|
||||
showCacheInfo: false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -60,7 +74,11 @@ export function loadSettings(): AppSettings {
|
||||
// Убеждаемся, что все обязательные поля присутствуют
|
||||
const mergedSettings: AppSettings = {
|
||||
...defaultSettings,
|
||||
...settings
|
||||
...settings,
|
||||
debug: {
|
||||
...defaultSettings.debug,
|
||||
...settings.debug
|
||||
}
|
||||
}
|
||||
|
||||
cachedSettings = mergedSettings
|
||||
@@ -112,7 +130,11 @@ export function saveSettings(settings: AppSettings): void {
|
||||
// Объединяем с настройками по умолчанию для сохранения всех полей
|
||||
const mergedSettings: AppSettings = {
|
||||
...defaultSettings,
|
||||
...settings
|
||||
...settings,
|
||||
debug: {
|
||||
...defaultSettings.debug,
|
||||
...settings.debug
|
||||
}
|
||||
}
|
||||
|
||||
// Ищем существующий файл
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
{
|
||||
"weekNavigationEnabled": false
|
||||
"weekNavigationEnabled": false,
|
||||
"debug": {
|
||||
"forceCache": true,
|
||||
"forceEmpty": false,
|
||||
"forceError": false,
|
||||
"forceTimeout": false,
|
||||
"showCacheInfo": false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user