@@ -7,6 +7,7 @@ use wasm_bindgen::JsCast;
77use crate :: layout:: page_layout;
88use crate :: store;
99use crate :: store:: use_store;
10+ use crate :: utils:: parse_decimal;
1011use hrt_shared:: types:: { HormoneUnits , Settings } ;
1112
1213#[ component]
@@ -15,6 +16,13 @@ pub fn BackupPage() -> impl IntoView {
1516 let settings = store. settings ;
1617
1718 let ics_secret = create_rw_signal ( settings. get ( ) . icsSecret . unwrap_or_default ( ) ) ;
19+ let blood_test_interval_months = create_rw_signal (
20+ settings
21+ . get ( )
22+ . bloodTestIntervalMonths
23+ . map ( |v| v. to_string ( ) )
24+ . unwrap_or_default ( ) ,
25+ ) ;
1826 let ics_url = create_memo ( {
1927 let ics_secret = ics_secret;
2028 move |_| {
@@ -40,14 +48,17 @@ pub fn BackupPage() -> impl IntoView {
4048 let on_save_settings = {
4149 let store = store. clone ( ) ;
4250 let ics_secret = ics_secret;
51+ let blood_test_interval_months = blood_test_interval_months;
4352 move |_: leptos:: ev:: MouseEvent | {
4453 let secret = ics_secret. get ( ) ;
54+ let interval = parse_decimal ( & blood_test_interval_months. get ( ) ) ;
4555 store. settings . update ( |s| {
4656 s. icsSecret = if secret. trim ( ) . is_empty ( ) {
4757 None
4858 } else {
4959 Some ( secret)
5060 } ;
61+ s. bloodTestIntervalMonths = interval;
5162 } ) ;
5263 store. mark_dirty ( ) ;
5364 }
@@ -209,24 +220,20 @@ pub fn BackupPage() -> impl IntoView {
209220 </div>
210221 <label>"Blood test interval (months)" </label>
211222 <input
212- type ="number "
223+ type ="text "
213224 step="any"
214225 min="1"
215- on: input={
226+ on: input=move |ev| blood_test_interval_months. set( event_target_value( & ev) )
227+ on: blur={
216228 let store = store. clone( ) ;
217- move |ev| {
218- let value = event_target_value ( & ev ) ;
219- let parsed = value . parse :: < f64 > ( ) . ok ( ) ;
229+ let blood_test_interval_months = blood_test_interval_months ;
230+ move |_| {
231+ let parsed = parse_decimal ( & blood_test_interval_months . get ( ) ) ;
220232 store. settings. update( |s| s. bloodTestIntervalMonths = parsed) ;
221233 store. mark_dirty( ) ;
222234 }
223235 }
224- prop: value=move || store
225- . settings
226- . get( )
227- . bloodTestIntervalMonths
228- . map( |v| v. to_string( ) )
229- . unwrap_or_else( || "" . to_string( ) )
236+ prop: value=move || blood_test_interval_months. get( )
230237 />
231238 <label>"ICS URL secret (optional)" </label>
232239 <input
0 commit comments