11import { FC , useState , useEffect } from 'react' ;
22import { useAuth } from '../auth/AuthContext' ;
3- import { checkTelegramSettings , setTelegramSettings } from '../api' ;
3+ import { checkTelegramSettings , setTelegramSettings , sendTestTelegramMessage } from '../api' ;
44import './TelegramSettingsPage.css' ;
55
66export const TelegramSettingsPage : FC = ( ) => {
@@ -14,6 +14,8 @@ export const TelegramSettingsPage: FC = () => {
1414 const [ success , setSuccess ] = useState ( false ) ;
1515 const [ isConfigured , setIsConfigured ] = useState ( false ) ;
1616 const [ checkingStatus , setCheckingStatus ] = useState ( true ) ;
17+ const [ testLoading , setTestLoading ] = useState ( false ) ;
18+ const [ testMessage , setTestMessage ] = useState ( '' ) ;
1719
1820 useEffect ( ( ) => {
1921 checkConfigurationStatus ( ) ;
@@ -45,6 +47,7 @@ export const TelegramSettingsPage: FC = () => {
4547 e . preventDefault ( ) ;
4648 setError ( '' ) ;
4749 setSuccess ( false ) ;
50+ setTestMessage ( '' ) ;
4851
4952 if ( ! formData . telegram_bot_token . trim ( ) ) {
5053 setError ( 'Bot token is required' ) ;
@@ -78,6 +81,32 @@ export const TelegramSettingsPage: FC = () => {
7881 }
7982 } ;
8083
84+ const handleTestMessage = async ( ) => {
85+ setError ( '' ) ;
86+ setTestMessage ( '' ) ;
87+
88+ if ( ! isConfigured ) {
89+ setError ( 'Please save your settings first' ) ;
90+ return ;
91+ }
92+
93+ if ( ! token ) {
94+ setError ( 'Not authenticated' ) ;
95+ return ;
96+ }
97+
98+ setTestLoading ( true ) ;
99+ try {
100+ const result = await sendTestTelegramMessage ( token ) ;
101+ setTestMessage ( result . message ) ;
102+ setTimeout ( ( ) => setTestMessage ( '' ) , 5000 ) ;
103+ } catch ( err ) {
104+ setError ( err instanceof Error ? err . message : 'Failed to send test message' ) ;
105+ } finally {
106+ setTestLoading ( false ) ;
107+ }
108+ } ;
109+
81110 return (
82111 < div className = "telegram-settings-container" >
83112 < div className = "telegram-settings-header" >
@@ -116,10 +145,10 @@ export const TelegramSettingsPage: FC = () => {
116145 < div className = "settings-form-container" >
117146 < div
118147 className = { `status-indicator ${ checkingStatus
119- ? 'checking'
120- : isConfigured
121- ? 'configured'
122- : 'not-configured'
148+ ? 'checking'
149+ : isConfigured
150+ ? 'configured'
151+ : 'not-configured'
123152 } `}
124153 >
125154 < span className = "status-dot" > </ span >
@@ -144,6 +173,12 @@ export const TelegramSettingsPage: FC = () => {
144173 </ div >
145174 ) }
146175
176+ { testMessage && (
177+ < div className = "banner banner-success" >
178+ < span > ✓ { testMessage } </ span >
179+ </ div >
180+ ) }
181+
147182 < form onSubmit = { handleSubmit } className = "settings-form" >
148183 < div className = "form-group" >
149184 < label htmlFor = "telegram_bot_token" >
@@ -191,6 +226,21 @@ export const TelegramSettingsPage: FC = () => {
191226 </ button >
192227 </ form >
193228
229+ { isConfigured && (
230+ < div className = "test-section" >
231+ < h3 > Test Your Configuration</ h3 >
232+ < p > Send a test message to verify your bot is working correctly:</ p >
233+ < button
234+ type = "button"
235+ onClick = { handleTestMessage }
236+ disabled = { testLoading }
237+ className = "test-button"
238+ >
239+ { testLoading ? 'Sending test message...' : 'Send Test Message' }
240+ </ button >
241+ </ div >
242+ ) }
243+
194244 < div className = "info-section" >
195245 < h3 > Why do I need this?</ h3 >
196246 < p >
0 commit comments