1- import React , { useEffect } from 'react' ;
1+ import React , { useEffect , useState } from 'react' ;
22import { Form , Input , InputNumber , Switch , Tooltip } from 'antd' ;
3- import { QuestionCircleOutlined } from '@ant-design/icons' ;
3+ import { QuestionCircleOutlined , ApiOutlined } from '@ant-design/icons' ;
44import useGenericSettings from '@app/hooks/useGenericSettings' ;
55import { SettingsGroupType } from '@app/types/settings.types' ;
66import BaseSettingsForm from './BaseSettingsForm' ;
@@ -16,28 +16,28 @@ const NestFeederSettings: React.FC = () => {
1616 } = useGenericSettings ( 'nest_feeder' ) ;
1717
1818 const [ form ] = Form . useForm ( ) ;
19+ const [ isUserEditing , setIsUserEditing ] = useState ( false ) ;
1920
20- // Update form values when settings change
21+ // Update form values when settings change, but only if user isn't actively editing
2122 useEffect ( ( ) => {
22- if ( settings ) {
23+ if ( settings && ! isUserEditing ) {
2324 console . log ( 'NestFeederSettings - Received settings:' , settings ) ;
2425
2526 // Transform property names to match form field names
26- // The API returns properties without the prefix, but the form expects prefixed names
2727 const settingsObj = settings as Record < string , any > ;
2828
2929 const formValues = {
3030 nest_feeder_enabled : settingsObj . enabled ,
3131 nest_feeder_url : settingsObj . url ,
32- nest_feeder_timeout : typeof settingsObj . timeout === 'string'
33- ? parseInt ( settingsObj . timeout )
34- : settingsObj . timeout ,
35- nest_feeder_cache_size : typeof settingsObj . cache_size === 'string'
36- ? parseInt ( settingsObj . cache_size )
32+ nest_feeder_cache_size : typeof settingsObj . cache_size === 'string'
33+ ? parseInt ( settingsObj . cache_size )
3734 : settingsObj . cache_size ,
38- nest_feeder_cache_ttl : typeof settingsObj . cache_ttl === 'string'
39- ? parseInt ( settingsObj . cache_ttl )
40- : settingsObj . cache_ttl
35+ nest_feeder_cache_ttl : typeof settingsObj . cache_ttl === 'string'
36+ ? parseInt ( settingsObj . cache_ttl )
37+ : settingsObj . cache_ttl ,
38+ nest_feeder_timeout : typeof settingsObj . timeout === 'string'
39+ ? parseInt ( settingsObj . timeout )
40+ : settingsObj . timeout ,
4141 } ;
4242
4343 console . log ( 'NestFeederSettings - Transformed form values:' , formValues ) ;
@@ -48,27 +48,40 @@ const NestFeederSettings: React.FC = () => {
4848 console . log ( 'NestFeederSettings - Form values after set:' , form . getFieldsValue ( ) ) ;
4949 } , 100 ) ;
5050 }
51- } , [ settings , form ] ) ;
51+ } , [ settings , form , isUserEditing ] ) ;
5252
5353 // Handle form value changes
5454 const handleValuesChange = ( changedValues : Partial < SettingsGroupType < 'nest_feeder' > > ) => {
55+ setIsUserEditing ( true ) ; // Mark that user is currently editing
5556 updateSettings ( changedValues ) ;
5657 } ;
5758
59+ // Modified save function to reset the editing flag
60+ const handleSave = async ( ) => {
61+ await saveSettings ( ) ;
62+ setIsUserEditing ( false ) ; // Reset after saving
63+ } ;
64+
5865 return (
5966 < BaseSettingsForm
6067 title = "Nest Feeder Settings"
6168 loading = { loading }
6269 error = { error }
63- onSave = { saveSettings }
64- onReset = { fetchSettings }
70+ onSave = { handleSave }
71+ onReset = { ( ) => {
72+ fetchSettings ( ) ;
73+ setIsUserEditing ( false ) ;
74+ } }
6575 >
6676 < Form
6777 form = { form }
6878 layout = "vertical"
6979 onValuesChange = { handleValuesChange }
7080 initialValues = { settings || { } }
71- onFinish = { ( values ) => console . log ( 'Form submitted with values:' , values ) }
81+ onFinish = { ( values ) => {
82+ console . log ( 'Form submitted with values:' , values ) ;
83+ setIsUserEditing ( false ) ;
84+ } }
7285 >
7386 < Form . Item
7487 name = "nest_feeder_enabled"
@@ -82,68 +95,68 @@ const NestFeederSettings: React.FC = () => {
8295 name = "nest_feeder_url"
8396 label = {
8497 < span >
85- Nest Feeder URL
86- < Tooltip title = "URL of the Nest Feeder service " >
98+ API Endpoint
99+ < Tooltip title = "URL of the Nest Feeder API " >
87100 < QuestionCircleOutlined />
88101 </ Tooltip >
89102 </ span >
90103 }
91- rules = { [
92- { required : true , message : 'Please enter the Nest Feeder URL' } ,
93- { type : 'url' , message : 'Please enter a valid URL' }
94- ] }
104+ rules = { [ { required : true , message : 'Please enter the API endpoint' } ] }
95105 >
96- < Input placeholder = "https://nest-feeder.example.com" />
106+ < Input
107+ prefix = { < ApiOutlined /> }
108+ placeholder = "http://localhost:8000/feed"
109+ />
97110 </ Form . Item >
98111
99112 < Form . Item
100- name = "nest_feeder_timeout "
113+ name = "nest_feeder_cache_size "
101114 label = {
102115 < span >
103- Timeout (seconds)
104- < Tooltip title = "Maximum time to wait for a response from the Nest Feeder service " >
116+ Cache Size
117+ < Tooltip title = "Maximum number of entries in the nest feeder cache " >
105118 < QuestionCircleOutlined />
106119 </ Tooltip >
107120 </ span >
108121 }
109122 rules = { [
110- { required : true , message : 'Please enter a timeout value ' } ,
111- { type : 'number' , min : 1 , message : 'Value must be at least 1 ' }
123+ { required : true , message : 'Please enter a cache size ' } ,
124+ { type : 'number' , min : 100 , message : 'Value must be at least 100 ' }
112125 ] }
113126 >
114- < InputNumber min = { 1 } style = { { width : '100%' } } />
127+ < InputNumber min = { 100 } style = { { width : '100%' } } />
115128 </ Form . Item >
116129
117130 < Form . Item
118- name = "nest_feeder_cache_size "
131+ name = "nest_feeder_cache_ttl "
119132 label = {
120133 < span >
121- Cache Size
122- < Tooltip title = "Maximum number of entries to store in the Nest Feeder cache " >
134+ Cache TTL (seconds)
135+ < Tooltip title = "Time to live for cache entries in seconds " >
123136 < QuestionCircleOutlined />
124137 </ Tooltip >
125138 </ span >
126139 }
127140 rules = { [
128- { required : true , message : 'Please enter a cache size ' } ,
129- { type : 'number' , min : 100 , message : 'Value must be at least 100 ' }
141+ { required : true , message : 'Please enter a cache TTL ' } ,
142+ { type : 'number' , min : 1 , message : 'Value must be at least 1 ' }
130143 ] }
131144 >
132- < InputNumber min = { 100 } style = { { width : '100%' } } />
145+ < InputNumber min = { 1 } style = { { width : '100%' } } />
133146 </ Form . Item >
134147
135148 < Form . Item
136- name = "nest_feeder_cache_ttl "
149+ name = "nest_feeder_timeout "
137150 label = {
138151 < span >
139- Cache TTL (seconds)
140- < Tooltip title = "Time to live for cache entries in seconds " >
152+ Timeout (seconds)
153+ < Tooltip title = "Timeout for API requests " >
141154 < QuestionCircleOutlined />
142155 </ Tooltip >
143156 </ span >
144157 }
145158 rules = { [
146- { required : true , message : 'Please enter a cache TTL ' } ,
159+ { required : true , message : 'Please enter a timeout value ' } ,
147160 { type : 'number' , min : 1 , message : 'Value must be at least 1' }
148161 ] }
149162 >
0 commit comments