/** * Компонент страницы администратора * @module AdminPage */ import { useNavigate, useParams } from '@solidjs/router' import { Component, createEffect, createSignal, onMount, Show } from 'solid-js' import publyLogo from './assets/publy.svg?url' import { logout } from './context/auth' // Прямой импорт компонентов вместо ленивой загрузки import AuthorsRoute from './routes/authors' import CollectionsRoute from './routes/collections' import CommunitiesRoute from './routes/communities' import EnvRoute from './routes/env' import InvitesRoute from './routes/invites' import ShoutsRoute from './routes/shouts' import TopicsRoute from './routes/topics' import styles from './styles/Admin.module.css' import Button from './ui/Button' /** * Интерфейс свойств компонента AdminPage */ export interface AdminPageProps { apiUrl: string onLogout?: () => void } /** * Компонент страницы администратора */ const AdminPage: Component = (props) => { console.log('[AdminPage] Initializing...') const navigate = useNavigate() const params = useParams() const [error, setError] = createSignal(null) const [successMessage, setSuccessMessage] = createSignal(null) const [currentTab, setCurrentTab] = createSignal('authors') onMount(() => { console.log('[AdminPage] Component mounted') console.log('[AdminPage] Initial params:', params) // Если мы на корневом пути /admin, редиректим на /admin/authors if (!params.tab) { navigate('/admin/authors', { replace: true }) } else { setCurrentTab(params.tab) } }) // Отслеживаем изменения параметров роута createEffect(() => { console.log('[AdminPage] Params changed:', params) console.log('[AdminPage] Current tab param:', params.tab) const newTab = params.tab || 'authors' setCurrentTab(newTab) console.log('[AdminPage] Updated currentTab to:', newTab) }) // Определяем активную вкладку const activeTab = () => { const tab = currentTab() console.log('[AdminPage] activeTab() returning:', tab) return tab } /** * Обрабатывает выход из системы */ const handleLogout = async () => { try { await logout() if (props.onLogout) { props.onLogout() } navigate('/login') } catch (error) { setError(`Ошибка при выходе: ${(error as Error).message}`) } } /** * Обработчик ошибок */ const handleError = (error: string) => { setError(error) // Скрываем ошибку через 5 секунд setTimeout(() => setError(null), 5000) } /** * Обработчик успешных операций */ const handleSuccess = (message: string) => { setSuccessMessage(message) // Скрываем сообщение через 3 секунды setTimeout(() => setSuccessMessage(null), 3000) } return (
Logo

Панель администратора

{error()}
{successMessage()}
{/* Используем Show компоненты для каждой вкладки */}
) } export default AdminPage