1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use crate::{input::text_input, Todo};
use mox::mox;
use moxie_dom::{
    elements::sectioning::{h1, header, Header},
    prelude::*,
};
use tracing::info;

#[topo::nested]
#[illicit::from_env(todos: &Key<Vec<Todo>>)]
pub fn input_header() -> Header {
    let todos = todos.clone();
    mox! {
        <header class="header">
            <h1>"todos"</h1>
            { text_input(
                "What needs to be done?",
                false,
                move |value: String| {
                    todos.update(|prev| {
                        let mut todos: Vec<Todo> = prev.to_vec();
                        todos.push(Todo::new(value));
                        info!({ ?todos }, "added new todo");
                        Some(todos)
                    });
                },
            )}
        </header>
    }
}