diff --git a/src/pages/AdminSettings.tsx b/src/pages/AdminSettings.tsx index 713d2fd..03714c9 100644 --- a/src/pages/AdminSettings.tsx +++ b/src/pages/AdminSettings.tsx @@ -104,6 +104,38 @@ const MenuIcon = () => ( ) +// ============ HELPER FUNCTIONS ============ +// Форматирование названия настройки (Snake_Case / CamelCase -> читаемый текст) +function formatSettingName(name: string): string { + if (!name) return '' + + // Убираем префиксы типа "Miniapp ", "Happ " и т.д. + let formatted = name + // CamelCase -> пробелы + .replace(/([a-z])([A-Z])/g, '$1 $2') + // snake_case -> пробелы + .replace(/_/g, ' ') + // Убираем лишние пробелы + .replace(/\s+/g, ' ') + .trim() + + // Делаем первую букву заглавной, остальные как есть + return formatted.charAt(0).toUpperCase() + formatted.slice(1) +} + +// Очистка HTML тегов из описания +function stripHtml(html: string): string { + if (!html) return '' + return html + .replace(/<[^>]*>/g, '') + .replace(/ /g, ' ') + .replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/"/g, '"') + .trim() +} + // ============ SIDEBAR MENU ITEMS ============ interface MenuItem { id: string @@ -379,31 +411,34 @@ export default function AdminSettings() { const renderSettingRow = (setting: SettingDefinition) => { const isFav = isFavorite(setting.key) + const displayName = formatSettingName(setting.name || setting.key) + const description = setting.hint?.description ? stripHtml(setting.hint.description) : null return (
{description}
)}{setting.hint.description}
- )} -{t('admin.settings.favoritesHint')}
{t('admin.settings.noSettings')}