import solara
from typing import TypedDict
class TodoItem(TypedDict):
text: str
done: bool
class TodoStore:
def __init__(self, items):
self._items = solara.reactive(items)
@property
def items(self):
return self._items.value
def add_item(self, item):
self._items.value = [*self._items.value, item]
def add(self, text):
self.add_item({"text": text, "done": False})
default_store = TodoStore([
TodoItem(text="Write a blog post", done=False),
TodoItem(text="Take out the trash", done=True),
TodoItem(text="Do the laundry", done=False),
])
@solara.component
def TodoApp(store: TodoStore=default_store):
new_text = solara.use_reactive("")
for item in store.items:
with solara.Card():
solara.InputText("", value=item["text"])
solara.Switch(label="Done", value=item["done"])
with solara.Card("New item"):
solara.InputText(label="Text", value=new_text)
solara.Button("Add new", on_click=lambda: store.add(new_text.value))
@solara.component
def Page():
TodoApp()