mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-28 17:43:47 +00:00
feat: add open_in setting for custom buttons (external browser / Telegram miniapp)
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
import apiClient from './client';
|
import apiClient from './client';
|
||||||
|
|
||||||
|
export type OpenIn = 'external' | 'webapp';
|
||||||
|
|
||||||
export interface MenuButtonConfig {
|
export interface MenuButtonConfig {
|
||||||
id: string;
|
id: string;
|
||||||
type: 'builtin' | 'custom';
|
type: 'builtin' | 'custom';
|
||||||
@@ -8,6 +10,7 @@ export interface MenuButtonConfig {
|
|||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
labels: Record<string, string>;
|
labels: Record<string, string>;
|
||||||
url: string | null;
|
url: string | null;
|
||||||
|
open_in: OpenIn;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MenuRowConfig {
|
export interface MenuRowConfig {
|
||||||
@@ -51,6 +54,7 @@ const DEFAULT_BUTTON: Omit<MenuButtonConfig, 'id' | 'type'> = {
|
|||||||
enabled: true,
|
enabled: true,
|
||||||
labels: {},
|
labels: {},
|
||||||
url: null,
|
url: null,
|
||||||
|
open_in: 'external',
|
||||||
};
|
};
|
||||||
|
|
||||||
function normalizeConfig(data: MenuConfig): MenuConfig {
|
function normalizeConfig(data: MenuConfig): MenuConfig {
|
||||||
|
|||||||
@@ -288,18 +288,40 @@ function ButtonChip({
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* URL input (custom buttons only) */}
|
{/* URL input + open mode (custom buttons only) */}
|
||||||
{!isBuiltin && (
|
{!isBuiltin && (
|
||||||
<div>
|
<>
|
||||||
<label className="mb-1.5 block text-xs font-medium text-dark-300">URL</label>
|
<div>
|
||||||
<input
|
<label className="mb-1.5 block text-xs font-medium text-dark-300">URL</label>
|
||||||
type="url"
|
<input
|
||||||
value={button.url || ''}
|
type="url"
|
||||||
onChange={(e) => onUpdate({ url: e.target.value || null })}
|
value={button.url || ''}
|
||||||
placeholder="https://..."
|
onChange={(e) => onUpdate({ url: e.target.value || null })}
|
||||||
className="w-full rounded-lg border border-dark-600 bg-dark-700/50 px-3 py-2 text-sm text-dark-100 placeholder-dark-500 transition-colors focus:border-accent-500 focus:outline-none"
|
placeholder="https://..."
|
||||||
/>
|
className="w-full rounded-lg border border-dark-600 bg-dark-700/50 px-3 py-2 text-sm text-dark-100 placeholder-dark-500 transition-colors focus:border-accent-500 focus:outline-none"
|
||||||
</div>
|
/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label className="mb-1.5 block text-xs font-medium text-dark-300">
|
||||||
|
{t('admin.menuEditor.openIn')}
|
||||||
|
</label>
|
||||||
|
<div className="flex gap-1.5">
|
||||||
|
{(['external', 'webapp'] as const).map((mode) => (
|
||||||
|
<button
|
||||||
|
key={mode}
|
||||||
|
onClick={() => onUpdate({ open_in: mode })}
|
||||||
|
className={`flex h-7 items-center gap-1.5 rounded-lg border px-2.5 text-xs font-medium transition-all ${
|
||||||
|
button.open_in === mode
|
||||||
|
? 'border-accent-500 bg-accent-500/10 text-accent-400'
|
||||||
|
: 'border-dark-600 bg-dark-700/50 text-dark-300 hover:border-dark-500'
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{t(`admin.menuEditor.openMode.${mode}`)}
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Localized labels */}
|
{/* Localized labels */}
|
||||||
@@ -665,6 +687,7 @@ export function MenuEditorTab() {
|
|||||||
enabled: true,
|
enabled: true,
|
||||||
labels: {},
|
labels: {},
|
||||||
url: null,
|
url: null,
|
||||||
|
open_in: 'external',
|
||||||
};
|
};
|
||||||
setDraftConfig((prev) => ({
|
setDraftConfig((prev) => ({
|
||||||
...prev,
|
...prev,
|
||||||
@@ -683,6 +706,7 @@ export function MenuEditorTab() {
|
|||||||
enabled: true,
|
enabled: true,
|
||||||
labels: {},
|
labels: {},
|
||||||
url: '',
|
url: '',
|
||||||
|
open_in: 'external',
|
||||||
};
|
};
|
||||||
setDraftConfig((prev) => ({
|
setDraftConfig((prev) => ({
|
||||||
...prev,
|
...prev,
|
||||||
|
|||||||
@@ -1781,6 +1781,11 @@
|
|||||||
"customLabelsHint": "Empty = default label",
|
"customLabelsHint": "Empty = default label",
|
||||||
"moveUp": "Move up",
|
"moveUp": "Move up",
|
||||||
"moveDown": "Move down",
|
"moveDown": "Move down",
|
||||||
|
"openIn": "Open in",
|
||||||
|
"openMode": {
|
||||||
|
"external": "External browser",
|
||||||
|
"webapp": "Telegram miniapp"
|
||||||
|
},
|
||||||
"invalidUrl": "Please provide a valid URL (http:// or https://) for all custom buttons"
|
"invalidUrl": "Please provide a valid URL (http:// or https://) for all custom buttons"
|
||||||
},
|
},
|
||||||
"apps": {
|
"apps": {
|
||||||
|
|||||||
@@ -1443,6 +1443,11 @@
|
|||||||
"customLabelsHint": "متن دکمه برای هر زبان ربات",
|
"customLabelsHint": "متن دکمه برای هر زبان ربات",
|
||||||
"moveUp": "انتقال به بالا",
|
"moveUp": "انتقال به بالا",
|
||||||
"moveDown": "انتقال به پایین",
|
"moveDown": "انتقال به پایین",
|
||||||
|
"openIn": "باز کردن در",
|
||||||
|
"openMode": {
|
||||||
|
"external": "مرورگر خارجی",
|
||||||
|
"webapp": "مینیاپ تلگرام"
|
||||||
|
},
|
||||||
"invalidUrl": "لطفاً برای تمام دکمههای سفارشی یک URL معتبر وارد کنید (http:// یا https://)"
|
"invalidUrl": "لطفاً برای تمام دکمههای سفارشی یک URL معتبر وارد کنید (http:// یا https://)"
|
||||||
},
|
},
|
||||||
"apps": {
|
"apps": {
|
||||||
|
|||||||
@@ -2292,6 +2292,11 @@
|
|||||||
"customLabelsHint": "Пустое поле = название по умолчанию",
|
"customLabelsHint": "Пустое поле = название по умолчанию",
|
||||||
"moveUp": "Переместить вверх",
|
"moveUp": "Переместить вверх",
|
||||||
"moveDown": "Переместить вниз",
|
"moveDown": "Переместить вниз",
|
||||||
|
"openIn": "Открывать в",
|
||||||
|
"openMode": {
|
||||||
|
"external": "Внешний браузер",
|
||||||
|
"webapp": "Telegram miniapp"
|
||||||
|
},
|
||||||
"invalidUrl": "Укажите корректный URL (http:// или https://) для всех пользовательских кнопок"
|
"invalidUrl": "Укажите корректный URL (http:// или https://) для всех пользовательских кнопок"
|
||||||
},
|
},
|
||||||
"apps": {
|
"apps": {
|
||||||
|
|||||||
@@ -1481,6 +1481,11 @@
|
|||||||
"customLabelsHint": "每种语言的按钮文本",
|
"customLabelsHint": "每种语言的按钮文本",
|
||||||
"moveUp": "上移",
|
"moveUp": "上移",
|
||||||
"moveDown": "下移",
|
"moveDown": "下移",
|
||||||
|
"openIn": "打开方式",
|
||||||
|
"openMode": {
|
||||||
|
"external": "外部浏览器",
|
||||||
|
"webapp": "Telegram 小程序"
|
||||||
|
},
|
||||||
"invalidUrl": "请为所有自定义按钮提供有效的URL(http:// 或 https://)"
|
"invalidUrl": "请为所有自定义按钮提供有效的URL(http:// 或 https://)"
|
||||||
},
|
},
|
||||||
"apps": {
|
"apps": {
|
||||||
|
|||||||
Reference in New Issue
Block a user