Skip to content

Commit a85f8ef

Browse files
committed
feat(subscription): add allow_browser_config field
1 parent 1e71239 commit a85f8ef

File tree

6 files changed

+40
-5
lines changed

6 files changed

+40
-5
lines changed

dashboard/public/statics/locales/en.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,9 @@
210210
"announceDescription": "Short message shown to users in supported subscription clients",
211211
"announceUrl": "Announcement URL",
212212
"announceUrlPlaceholder": "https://status.example.com",
213-
"announceUrlDescription": "Optional link with more information about the announcement"
213+
"announceUrlDescription": "Optional link with more information about the announcement",
214+
"allowBrowserConfig": "Show Links in Subscription Page",
215+
"allowBrowserConfigDescription": "Display subscription links on the subscription page template when accessed via browser"
214216
},
215217
"rules": {
216218
"title": "Subscription Rules",

dashboard/public/statics/locales/fa.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@
117117
"announceDescription": "پیام کوتاهی که در کلاینت‌های سازگار نمایش داده می‌شود",
118118
"announceUrl": "آدرس اطلاعیه",
119119
"announceUrlPlaceholder": "https://status.example.com",
120-
"announceUrlDescription": "لینک اختیاری برای جزئیات بیشتر اطلاعیه"
120+
"announceUrlDescription": "لینک اختیاری برای جزئیات بیشتر اطلاعیه",
121+
"allowBrowserConfig": "نمایش لینک‌ها در صفحه اشتراک",
122+
"allowBrowserConfigDescription": "نمایش لینک‌های اشتراک در قالب صفحه اشتراک هنگام دسترسی از طریق مرورگر"
121123
},
122124
"rules": {
123125
"title": "قوانین اشتراک",

dashboard/public/statics/locales/ru.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,9 @@
224224
"announceDescription": "Короткое сообщение, показываемое пользователям в поддерживаемых клиентах подписки",
225225
"announceUrl": "Ссылка на объявление",
226226
"announceUrlPlaceholder": "https://status.example.com",
227-
"announceUrlDescription": "Необязательная ссылка с дополнительной информацией об объявлении"
227+
"announceUrlDescription": "Необязательная ссылка с дополнительной информацией об объявлении",
228+
"allowBrowserConfig": "Показывать ссылки на странице подписки",
229+
"allowBrowserConfigDescription": "Отображать ссылки подписки в шаблоне страницы подписки при доступе через браузер"
228230
},
229231
"rules": {
230232
"title": "Правила подписки",

dashboard/public/statics/locales/zh.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,9 @@
190190
"announceDescription": "在支持的订阅客户端中展示给用户的简短消息",
191191
"announceUrl": "公告链接",
192192
"announceUrlPlaceholder": "https://status.example.com",
193-
"announceUrlDescription": "可选的链接,用于提供更多公告细节"
193+
"announceUrlDescription": "可选的链接,用于提供更多公告细节",
194+
"allowBrowserConfig": "在订阅页面显示链接",
195+
"allowBrowserConfigDescription": "当通过浏览器访问时,在订阅页面模板中显示订阅链接"
194196
},
195197
"rules": {
196198
"title": "订阅规则",

dashboard/src/pages/_dashboard.settings.subscriptions.tsx

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { closestCenter, DndContext, DragEndEvent, KeyboardSensor, PointerSensor,
1414
import { rectSortingStrategy, SortableContext, sortableKeyboardCoordinates, useSortable } from '@dnd-kit/sortable'
1515
import { CSS } from '@dnd-kit/utilities'
1616
import { zodResolver } from '@hookform/resolvers/zod'
17-
import { Clock, Code, ExternalLink, FileCode2, FileText, GripVertical, HelpCircle, Link, Lock, Megaphone, Plus, RotateCcw, Settings, Shield, Sword, Trash2, User } from 'lucide-react'
17+
import { Clock, Code, ExternalLink, FileCode2, FileText, Globe, GripVertical, HelpCircle, Link, Lock, Megaphone, Plus, RotateCcw, Settings, Shield, Sword, Trash2, User } from 'lucide-react'
1818
import { useEffect, useState } from 'react'
1919
import { useFieldArray, useForm } from 'react-hook-form'
2020
import { useTranslation } from 'react-i18next'
@@ -30,6 +30,7 @@ const subscriptionSchema = z.object({
3030
profile_title: z.string().optional(),
3131
announce: z.string().max(128, 'Announcement must be 128 characters or less').optional(),
3232
announce_url: z.string().url('Please enter a valid URL').optional().or(z.literal('')),
33+
allow_browser_config: z.boolean().optional(),
3334
rules: z.array(
3435
z.object({
3536
pattern: z.string().min(1, 'Pattern is required'),
@@ -447,6 +448,7 @@ export default function SubscriptionSettings() {
447448
profile_title: '',
448449
announce: '',
449450
announce_url: '',
451+
allow_browser_config: true,
450452
rules: [],
451453
applications: [],
452454
manual_sub_request: {
@@ -533,6 +535,7 @@ export default function SubscriptionSettings() {
533535
profile_title: subscriptionData.profile_title || '',
534536
announce: subscriptionData.announce || '',
535537
announce_url: subscriptionData.announce_url || '',
538+
allow_browser_config: subscriptionData.allow_browser_config ?? true,
536539
rules: subscriptionData.rules || [],
537540
applications: subscriptionData.applications || [],
538541
manual_sub_request: {
@@ -666,6 +669,7 @@ export default function SubscriptionSettings() {
666669
profile_title: subscriptionData.profile_title || '',
667670
announce: subscriptionData.announce || '',
668671
announce_url: subscriptionData.announce_url || '',
672+
allow_browser_config: subscriptionData.allow_browser_config ?? true,
669673
rules: subscriptionData.rules || [],
670674
applications: subscriptionData.applications || [],
671675
manual_sub_request: {
@@ -959,6 +963,27 @@ export default function SubscriptionSettings() {
959963
</FormItem>
960964
)}
961965
/>
966+
967+
<FormField
968+
control={form.control}
969+
name="allow_browser_config"
970+
render={({ field }) => (
971+
<FormItem className="flex items-center justify-between space-y-0 rounded-lg border bg-card p-3 transition-colors hover:bg-accent/50 sm:p-4 lg:col-span-2">
972+
<div className="flex-1 space-y-0.5 pr-4">
973+
<FormLabel className="flex cursor-pointer items-center gap-2 text-sm font-medium">
974+
<Globe className="h-4 w-4 shrink-0" />
975+
<span className="break-words">{t('settings.subscriptions.general.allowBrowserConfig')}</span>
976+
</FormLabel>
977+
<FormDescription className="text-xs leading-relaxed text-muted-foreground sm:leading-normal">
978+
{t('settings.subscriptions.general.allowBrowserConfigDescription')}
979+
</FormDescription>
980+
</div>
981+
<FormControl>
982+
<Switch checked={field.value} onCheckedChange={field.onChange} />
983+
</FormControl>
984+
</FormItem>
985+
)}
986+
/>
962987
</div>
963988
</div>
964989

dashboard/src/service/api/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -913,6 +913,7 @@ export interface SubscriptionOutput {
913913
rules: SubRule[]
914914
manual_sub_request?: SubFormatEnable
915915
applications?: ApplicationOutput[]
916+
allow_browser_config?: boolean
916917
}
917918

918919
export interface SubscriptionInput {
@@ -926,6 +927,7 @@ export interface SubscriptionInput {
926927
rules: SubRule[]
927928
manual_sub_request?: SubFormatEnable
928929
applications?: ApplicationInput[]
930+
allow_browser_config?: boolean
929931
}
930932

931933
export type SingBoxMuxSettingsBrutal = Brutal | null

0 commit comments

Comments
 (0)