/** * Компонент страницы администратора * @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 styles from '../styles/Admin.module.css' import Button from '../ui/Button' import CommunitySelector from '../ui/CommunitySelector' import LanguageSwitcher from '../ui/LanguageSwitcher' // Прямой импорт компонентов вместо ленивой загрузки import AuthorsRoute from './authors' import CollectionsRoute from './collections' import CommunitiesRoute from './communities' import EnvRoute from './env' import InvitesRoute from './invites' import ShoutsRoute from './shouts' import { Topics as TopicsRoute } from './topics' /** * Интерфейс свойств компонента 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 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

Панель администратора v{__APP_VERSION__}

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