component_todo = props => {
let root = html`<div>`;
let todos;
function addTodo(i = todos.length) {
const newTodos = todos.slice();
newTodos.splice(i, 0, "");
setTodos(newTodos);
root.children[i].querySelector("input").focus();
}
function modifyTodo(i, value) {
const newTodos = todos.slice();
newTodos[i] = value;
setTodos(newTodos);
}
function removeTodo(i) {
const newTodos = todos.slice();
newTodos.splice(i, 1);
setTodos(newTodos);
root.children[i - 1].querySelector("input").focus();
}
function setTodos(newTodos) {
todos = newTodos.map(t => t.toUpperCase());
let new_root = html`<div class="todos">
${todos.map(
(todo, i) => html`<div>
${html`<input value=${todo}
oninput=${event =>
modifyTodo(i, event.currentTarget.value)}>`}
${html`<button onclick=${() => removeTodo(i)}>-`}
</div>`
)}
${html`<button onclick=${() => addTodo()}>+`}
</div>`;
morph(root, new_root);
props.setter(todos);
}
setTodos(props.todos);
return root;
}