Spaces:
Sleeping
Sleeping
| 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() |