Рефакторинг: улучшение системы аутентификации и UI компонентов

- Удалены устаревшие файлы (mock.js, old-schedule.txt, loading-overlay.tsx)
- Переработана система аутентификации (login, logout, check-auth)
- Добавлен компонент toast для уведомлений
- Улучшен контекст загрузки (loading-context)
- Обновлен парсер расписания (schedule.ts)
- Улучшена админ-панель
- Обновлена документация (README.md)
- Старые файлы перемещены в директорию old/
This commit is contained in:
kilyabin
2025-11-28 00:29:46 +04:00
parent 24bb531dfb
commit 9df04745df
17 changed files with 511 additions and 117 deletions

View File

@@ -15,6 +15,7 @@ import {
import { loadGroups, GroupsData } from '@/shared/data/groups-loader'
import { loadSettings, AppSettings } from '@/shared/data/settings-loader'
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/shadcn/ui/select'
import { ToastContainer, Toast } from '@/shared/ui/toast'
import Head from 'next/head'
type AdminPageProps = {
@@ -34,6 +35,16 @@ export default function AdminPage({ groups: initialGroups, settings: initialSett
const [showEditDialog, setShowEditDialog] = React.useState(false)
const [showDeleteDialog, setShowDeleteDialog] = React.useState(false)
const [groupToDelete, setGroupToDelete] = React.useState<string | null>(null)
const [toasts, setToasts] = React.useState<Toast[]>([])
const showToast = (message: string, type: 'success' | 'error' = 'success') => {
const id = Date.now().toString()
setToasts((prev) => [...prev, { id, message, type }])
}
const removeToast = (id: string) => {
setToasts((prev) => prev.filter((toast) => toast.id !== id))
}
// Форма добавления/редактирования
const [formData, setFormData] = React.useState({
@@ -131,15 +142,20 @@ export default function AdminPage({ groups: initialGroups, settings: initialSett
if (res.ok && data.success) {
// Обновляем состояние из ответа сервера (для синхронизации)
setSettings(data.settings)
showToast('Настройки успешно обновлены', 'success')
} else {
// Откатываем изменения при ошибке
setSettings(previousSettings)
setError(data.error || 'Ошибка при обновлении настроек')
const errorMessage = data.error || 'Ошибка при обновлении настроек'
setError(errorMessage)
showToast(errorMessage, 'error')
}
} catch (err) {
// Откатываем изменения при ошибке
setSettings(previousSettings)
setError('Ошибка соединения с сервером')
const errorMessage = 'Ошибка соединения с сервером'
setError(errorMessage)
showToast(errorMessage, 'error')
}
}
@@ -166,11 +182,16 @@ export default function AdminPage({ groups: initialGroups, settings: initialSett
setGroups(data.groups)
setShowAddDialog(false)
setFormData({ id: '', parseId: '', name: '', course: '1' })
showToast('Группа успешно добавлена', 'success')
} else {
setError(data.error || 'Ошибка при добавлении группы')
const errorMessage = data.error || 'Ошибка при добавлении группы'
setError(errorMessage)
showToast(errorMessage, 'error')
}
} catch (err) {
setError('Ошибка соединения с сервером')
const errorMessage = 'Ошибка соединения с сервером'
setError(errorMessage)
showToast(errorMessage, 'error')
} finally {
setLoading(false)
}
@@ -201,11 +222,16 @@ export default function AdminPage({ groups: initialGroups, settings: initialSett
setShowEditDialog(false)
setEditingGroup(null)
setFormData({ id: '', parseId: '', name: '', course: '1' })
showToast('Группа успешно обновлена', 'success')
} else {
setError(data.error || 'Ошибка при редактировании группы')
const errorMessage = data.error || 'Ошибка при редактировании группы'
setError(errorMessage)
showToast(errorMessage, 'error')
}
} catch (err) {
setError('Ошибка соединения с сервером')
const errorMessage = 'Ошибка соединения с сервером'
setError(errorMessage)
showToast(errorMessage, 'error')
} finally {
setLoading(false)
}
@@ -228,11 +254,16 @@ export default function AdminPage({ groups: initialGroups, settings: initialSett
setGroups(data.groups)
setShowDeleteDialog(false)
setGroupToDelete(null)
showToast('Группа успешно удалена', 'success')
} else {
setError(data.error || 'Ошибка при удалении группы')
const errorMessage = data.error || 'Ошибка при удалении группы'
setError(errorMessage)
showToast(errorMessage, 'error')
}
} catch (err) {
setError('Ошибка соединения с сервером')
const errorMessage = 'Ошибка соединения с сервером'
setError(errorMessage)
showToast(errorMessage, 'error')
} finally {
setLoading(false)
}
@@ -586,6 +617,9 @@ export default function AdminPage({ groups: initialGroups, settings: initialSett
</DialogFooter>
</DialogContent>
</Dialog>
{/* Toast уведомления */}
<ToastContainer toasts={toasts} onClose={removeToast} />
</>
)
}