akhaliq's picture
akhaliq HF Staff
Deploy from anycoder
80e41d2 verified
import gradio as gr
todos = []
def get_todos_data():
data = []
for i, todo in enumerate(todos):
status = "βœ… Done" if todo["done"] else "⬜ Pending"
data.append([i, todo["task"], status, "❌ Delete"])
return data
def add_task(task):
if task and task.strip():
todos.append({"task": task.strip(), "done": False})
return get_todos_data(), ""
def handle_interaction(evt: gr.SelectData):
if evt.index[1] == 2:
index = evt.index[0]
todos[index]["done"] = not todos[index]["done"]
elif evt.index[1] == 3:
index = evt.index[0]
todos.pop(index)
return get_todos_data()
with gr.Blocks(title="Todo App") as app:
gr.Markdown("<h1>πŸ“ Todo App</h1><p>Built with <a href='https://huggingface.co/spaces/akhaliq/anycoder' target='_blank'>anycoder</a></p>")
with gr.Row():
task_input = gr.Textbox(
label="New Task",
placeholder="Enter a task and press Enter or click Add...",
scale=4
)
add_btn = gr.Button("Add Task", variant="primary", scale=1)
todo_table = gr.DataFrame(
headers=["ID", "Task", "Status (Click to Toggle)", "Action (Click to Delete)"],
datatype=["number", "str", "str", "str"],
value=get_todos_data,
interactive=False,
wrap=True
)
add_btn.click(add_task, inputs=[task_input], outputs=[todo_table, task_input])
task_input.submit(add_task, inputs=[task_input], outputs=[todo_table, task_input])
todo_table.select(handle_interaction, inputs=None, outputs=todo_table)
if __name__ == "__main__":
app.launch()