feat: add menu editor tab with drag-and-drop rows, custom URL buttons, and button configuration

- Add menuLayout.ts API client with normalizeConfig and type definitions
- Add MenuEditorTab.tsx with DnD rows, button CRUD, style/emoji/label editors
- Replace ButtonsTab with MenuEditorTab on admin settings page
- Add menu editor translations for ru, en, zh, fa locales
- Loading/error states, useMemo optimizations, proper ref patterns
This commit is contained in:
Fringg
2026-03-09 23:07:38 +03:00
parent 78fda22679
commit 23aa86f1a8
7 changed files with 974 additions and 10 deletions

View File

@@ -1748,7 +1748,8 @@
"referral": "Referrals",
"support": "Support",
"info": "Info",
"admin": "Admin Panel"
"admin": "Admin Panel",
"language": "Language"
},
"descriptions": {
"home": "Personal cabinet button",
@@ -1757,7 +1758,8 @@
"referral": "Referral program",
"support": "Support tickets",
"info": "Information section",
"admin": "Web admin panel"
"admin": "Web admin panel",
"language": "Language selection"
},
"styles": {
"default": "No color",
@@ -1766,6 +1768,19 @@
"danger": "Red"
}
},
"menuEditor": {
"dragHint": "Drag rows to reorder them",
"dragToReorder": "Drag to reorder",
"row": "Row",
"addRow": "Add row",
"addButton": "Add button",
"addUrlButton": "URL button (link)",
"builtinButtons": "Built-in buttons",
"resetConfirm": "Reset menu layout to defaults?",
"buttonTextPlaceholder": "Custom button text",
"customLabelsHint": "Empty = default label",
"invalidUrl": "Please provide a valid URL (http:// or https://) for all custom buttons"
},
"apps": {
"title": "App Management",
"addApp": "Add App",

View File

@@ -1410,7 +1410,8 @@
"referral": "معرفی",
"support": "پشتیبانی",
"info": "اطلاعات",
"admin": "پنل مدیریت"
"admin": "پنل مدیریت",
"language": "زبان"
},
"descriptions": {
"home": "دکمه کابینت شخصی",
@@ -1419,7 +1420,8 @@
"referral": "برنامه معرفی",
"support": "تیکت‌های پشتیبانی",
"info": "بخش اطلاعات",
"admin": "پنل مدیریت وب"
"admin": "پنل مدیریت وب",
"language": "انتخاب زبان ربات"
},
"styles": {
"default": "بدون رنگ",
@@ -1428,6 +1430,19 @@
"danger": "قرمز"
}
},
"menuEditor": {
"dragHint": "ردیف‌ها را بکشید تا ترتیب تغییر کند",
"dragToReorder": "برای مرتب‌سازی بکشید",
"row": "ردیف",
"addRow": "افزودن ردیف",
"addButton": "افزودن دکمه",
"addUrlButton": "دکمه URL (لینک)",
"builtinButtons": "بخش‌های داخلی",
"resetConfirm": "منو به تنظیمات پیش‌فرض بازنشانی شود؟ تمام تغییرات از بین می‌رود.",
"buttonTextPlaceholder": "متن دکمه",
"customLabelsHint": "متن دکمه برای هر زبان ربات",
"invalidUrl": "لطفاً برای تمام دکمه‌های سفارشی یک URL معتبر وارد کنید (http:// یا https://)"
},
"apps": {
"title": "مدیریت برنامه‌ها",
"addApp": "افزودن برنامه",

View File

@@ -2259,7 +2259,8 @@
"referral": "Рефералы",
"support": "Поддержка",
"info": "Информация",
"admin": "Админка"
"admin": "Админка",
"language": "Язык"
},
"descriptions": {
"home": "Кнопка личного кабинета",
@@ -2268,7 +2269,8 @@
"referral": "Реферальная программа",
"support": "Обращения в поддержку",
"info": "Информационный раздел",
"admin": "Веб-админка"
"admin": "Веб-админка",
"language": "Выбор языка"
},
"styles": {
"default": "Без цвета",
@@ -2277,6 +2279,19 @@
"danger": "Красный"
}
},
"menuEditor": {
"dragHint": "Перетаскивайте ряды для изменения порядка",
"dragToReorder": "Перетащите для сортировки",
"row": "Ряд",
"addRow": "Добавить ряд",
"addButton": "Добавить кнопку",
"addUrlButton": "URL-кнопка (ссылка)",
"builtinButtons": "Встроенные кнопки",
"resetConfirm": "Сбросить компоновку меню к значениям по умолчанию?",
"buttonTextPlaceholder": "Свой текст кнопки",
"customLabelsHint": "Пустое поле = название по умолчанию",
"invalidUrl": "Укажите корректный URL (http:// или https://) для всех пользовательских кнопок"
},
"apps": {
"title": "Управление приложениями",
"addApp": "Добавить приложение",

View File

@@ -1448,7 +1448,8 @@
"referral": "推荐",
"support": "支持",
"info": "信息",
"admin": "管理面板"
"admin": "管理面板",
"language": "语言"
},
"descriptions": {
"home": "个人中心按钮",
@@ -1457,7 +1458,8 @@
"referral": "推荐计划",
"support": "支持工单",
"info": "信息板块",
"admin": "网页管理面板"
"admin": "网页管理面板",
"language": "机器人语言选择"
},
"styles": {
"default": "无颜色",
@@ -1466,6 +1468,19 @@
"danger": "红色"
}
},
"menuEditor": {
"dragHint": "拖拽行以重新排序",
"dragToReorder": "拖拽排序",
"row": "行",
"addRow": "添加行",
"addButton": "添加按钮",
"addUrlButton": "URL按钮链接",
"builtinButtons": "内置栏目",
"resetConfirm": "将菜单重置为默认设置?所有更改将丢失。",
"buttonTextPlaceholder": "按钮文本",
"customLabelsHint": "每种语言的按钮文本",
"invalidUrl": "请为所有自定义按钮提供有效的URLhttp:// 或 https://"
},
"apps": {
"title": "应用管理",
"addApp": "添加应用",