@@ -10,7 +10,7 @@ import { Switch } from '@/components/ui/switch'
1010import { Select , SelectContent , SelectItem , SelectTrigger , SelectValue } from '@/components/ui/select'
1111import { Separator } from '@/components/ui/separator'
1212import { Badge } from '@/components/ui/badge'
13- import { Plus , Trash2 , Filter , FileText , Link , Clock , HelpCircle , User , Settings , Code , FileCode2 , Sword , Shield , Lock , GripVertical , RotateCcw } from 'lucide-react'
13+ import { Plus , Trash2 , Filter , FileText , Link , Clock , HelpCircle , User , Settings , Code , FileCode2 , Sword , Shield , Lock , GripVertical , RotateCcw , Megaphone , ExternalLink } from 'lucide-react'
1414import { useSettingsContext } from './_dashboard.settings'
1515import { ConfigFormat } from '@/service/api'
1616import { toast } from 'sonner'
@@ -28,6 +28,8 @@ const subscriptionSchema = z.object({
2828 update_interval : z . number ( ) . min ( 1 , 'Update interval must be at least 1 hour' ) . max ( 168 , 'Update interval cannot exceed 168 hours (1 week)' ) . optional ( ) ,
2929 support_url : z . string ( ) . url ( 'Please enter a valid URL' ) . optional ( ) . or ( z . literal ( '' ) ) ,
3030 profile_title : z . string ( ) . optional ( ) ,
31+ announce : z . string ( ) . max ( 128 , 'Announcement must be 128 characters or less' ) . optional ( ) ,
32+ announce_url : z . string ( ) . url ( 'Please enter a valid URL' ) . optional ( ) . or ( z . literal ( '' ) ) ,
3133 host_status_filter : z . boolean ( ) ,
3234 rules : z . array (
3335 z . object ( {
@@ -432,6 +434,8 @@ export default function SubscriptionSettings() {
432434 update_interval : 24 ,
433435 support_url : '' ,
434436 profile_title : '' ,
437+ announce : '' ,
438+ announce_url : '' ,
435439 host_status_filter : false ,
436440 rules : [ ] ,
437441 applications : [ ] ,
@@ -517,6 +521,8 @@ export default function SubscriptionSettings() {
517521 update_interval : subscriptionData . update_interval || 24 ,
518522 support_url : subscriptionData . support_url || '' ,
519523 profile_title : subscriptionData . profile_title || '' ,
524+ announce : subscriptionData . announce || '' ,
525+ announce_url : subscriptionData . announce_url || '' ,
520526 host_status_filter : subscriptionData . host_status_filter || false ,
521527 rules : subscriptionData . rules || [ ] ,
522528 applications : subscriptionData . applications || [ ] ,
@@ -570,6 +576,8 @@ export default function SubscriptionSettings() {
570576 url_prefix : data . url_prefix ?. trim ( ) || undefined ,
571577 support_url : data . support_url ?. trim ( ) || undefined ,
572578 profile_title : data . profile_title ?. trim ( ) || undefined ,
579+ announce : data . announce ?. trim ( ) || undefined ,
580+ announce_url : data . announce_url ?. trim ( ) || undefined ,
573581 // Include processed applications
574582 applications : processedApplications ,
575583 } ,
@@ -643,6 +651,8 @@ export default function SubscriptionSettings() {
643651 update_interval : subscriptionData . update_interval || 24 ,
644652 support_url : subscriptionData . support_url || '' ,
645653 profile_title : subscriptionData . profile_title || '' ,
654+ announce : subscriptionData . announce || '' ,
655+ announce_url : subscriptionData . announce_url || '' ,
646656 host_status_filter : subscriptionData . host_status_filter || false ,
647657 rules : subscriptionData . rules || [ ] ,
648658 applications : subscriptionData . applications || [ ] ,
@@ -898,6 +908,42 @@ export default function SubscriptionSettings() {
898908 </ FormItem >
899909 ) }
900910 />
911+
912+ < FormField
913+ control = { form . control }
914+ name = "announce"
915+ render = { ( { field } ) => (
916+ < FormItem className = "space-y-2" >
917+ < FormLabel className = "flex items-center gap-2 text-sm font-medium" >
918+ < Megaphone className = "h-4 w-4" />
919+ { t ( 'settings.subscriptions.general.announce' ) }
920+ </ FormLabel >
921+ < FormControl >
922+ < Input maxLength = { 128 } placeholder = { t ( 'settings.subscriptions.general.announcePlaceholder' ) } { ...field } />
923+ </ FormControl >
924+ < FormDescription className = "text-sm text-muted-foreground" > { t ( 'settings.subscriptions.general.announceDescription' ) } </ FormDescription >
925+ < FormMessage />
926+ </ FormItem >
927+ ) }
928+ />
929+
930+ < FormField
931+ control = { form . control }
932+ name = "announce_url"
933+ render = { ( { field } ) => (
934+ < FormItem className = "space-y-2" >
935+ < FormLabel className = "flex items-center gap-2 text-sm font-medium" >
936+ < ExternalLink className = "h-4 w-4" />
937+ { t ( 'settings.subscriptions.general.announceUrl' ) }
938+ </ FormLabel >
939+ < FormControl >
940+ < Input type = "url" placeholder = { t ( 'settings.subscriptions.general.announceUrlPlaceholder' ) } { ...field } className = "font-mono" />
941+ </ FormControl >
942+ < FormDescription className = "text-sm text-muted-foreground" > { t ( 'settings.subscriptions.general.announceUrlDescription' ) } </ FormDescription >
943+ < FormMessage />
944+ </ FormItem >
945+ ) }
946+ />
901947 </ div >
902948
903949 < FormField
0 commit comments