{ message }
} + }) + .collect(); + + let has_job = state.interval_handle.is_some() || state.timeout_handle.is_some(); + + let on_add_timeout = { + let state = state.clone(); + + Callback::from(move |_: MouseEvent| { + let timeout_state = state.clone(); + let message_state = state.clone(); + let t = Timeout::new(3000, move || { + message_state.dispatch(TimerAction::TimeoutDone); + }); + + timeout_state.dispatch(TimerAction::SetTimeout(t)); + }) + }; + + let on_add_interval = { + let state = state.clone(); + + Callback::from(move |_: MouseEvent| { + let interval_state = state.clone(); + let message_state = state.clone(); + let i = Interval::new(1000, move || { + message_state.dispatch(TimerAction::Add("Tick..")); + }); + + interval_state.dispatch(TimerAction::SetInterval(i)); + }) + }; + + let on_cancel = { + Callback::from(move |_: MouseEvent| { + state.dispatch(TimerAction::Cancel); + }) + }; + + html!( + <> + +