import { useQuery } from '@tanstack/react-query';
import { useTranslation } from 'react-i18next';
import {
fetchAudit,
fetchInstanceGuilds,
fetchInstanceSettings,
fetchInstanceUsers,
instanceAuditQueryKey,
instanceGuildsQueryKey,
instanceSettingsQueryKey,
instanceUsersQueryKey,
} from '@/api/instance';
import { InstanceDashboard } from '@/components/instance/InstanceDashboard';
import { InstanceHealth } from '@/components/instance/InstanceHealth';
import { ErrorNotice, LoadingNotice } from '@/components/ui/ErrorNotice';
import { Card } from '@/components/ui/primitives';
import { formatDateTime } from '@/lib/identity';
import { useCurrentUser } from '@/lib/hooks';
import { useInstanceMetrics } from '@/lib/useInstanceMetrics';
const AUDIT_LIMIT = 50;
/** Админский раздел инстанса: настройки, серверы, пользователи, аудит (read-only). */
export default function InstanceSettingsPage() {
const { t, i18n } = useTranslation();
const locale = i18n.resolvedLanguage ?? 'ru';
const currentUser = useCurrentUser();
const isAdmin = currentUser.data?.is_instance_admin === true;
const settings = useQuery({
queryKey: instanceSettingsQueryKey,
queryFn: ({ signal }) => fetchInstanceSettings(signal),
enabled: isAdmin,
retry: 0,
});
const guilds = useQuery({
queryKey: instanceGuildsQueryKey,
queryFn: ({ signal }) => fetchInstanceGuilds(signal),
enabled: isAdmin,
retry: 0,
});
const users = useQuery({
queryKey: instanceUsersQueryKey,
queryFn: ({ signal }) => fetchInstanceUsers(signal),
enabled: isAdmin,
retry: 0,
});
const audit = useQuery({
queryKey: instanceAuditQueryKey(AUDIT_LIMIT),
queryFn: ({ signal }) => fetchAudit(AUDIT_LIMIT, signal),
enabled: isAdmin,
retry: 0,
});
// Живые метрики: опрос раз в секунду, пока раздел открыт (AGENT.md 7.19).
const metrics = useInstanceMetrics(isAdmin);
if (!isAdmin) {
return (
{t('settings.instance.notAdmin')}{t('settings.instance.title')}
{t('settings.instance.description')}
{t('settings.instance.settingsEmpty')}
) : null} {settingsEntries.length === 0 ? null : ({t('settings.instance.guildsEmpty')}
) : null} {guilds.data === undefined || guilds.data.length === 0 ? null : ({t('settings.instance.usersIdHint')}
{users.isPending ?{t('settings.instance.usersEmpty')}
) : null} {users.data === undefined || users.data.length === 0 ? null : ({t('settings.instance.auditEmpty')}
) : null} {audit.data === undefined || audit.data.length === 0 ? null : (