From 252f88b4c185fb87efd2fbeae3458d1d353c7fdf Mon Sep 17 00:00:00 2001 From: Akshay Date: Wed, 1 Oct 2025 08:47:56 +0530 Subject: [PATCH 1/3] feat(Daily Planner): add progress bar for task completion tracking --- pages/WellnessResourceHub.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pages/WellnessResourceHub.py b/pages/WellnessResourceHub.py index 668bad5..76d3a09 100644 --- a/pages/WellnessResourceHub.py +++ b/pages/WellnessResourceHub.py @@ -208,6 +208,13 @@ st.subheader("✅ Your Tasks") + # --- Display Progress Bar --- + if st.session_state.tasks: + completed_count = sum(1 for t in st.session_state.tasks if t["completed"]) + total_count = len(st.session_state.tasks) + progress_ratio = completed_count / total_count if total_count > 0 else 0 + st.progress(progress_ratio, text=f"{completed_count}/{total_count} Tasks Completed") + # --- Task Deletion and Completion Logic --- indices_to_delete = [] for i, task in enumerate(st.session_state.tasks): From 98fba4210985b69ebcb352be9ae2cdcf1264aaf3 Mon Sep 17 00:00:00 2001 From: Akshay Date: Wed, 1 Oct 2025 08:50:10 +0530 Subject: [PATCH 2/3] feat(daily-planner): add task editing and uuid-based task management - Implement task editing functionality with save/cancel options - Replace index-based task management with UUID keys - Add session state variables for editing mode - Improve task deletion to avoid re-indexing issues --- pages/WellnessResourceHub.py | 76 +++++++++++++++++++++++++++--------- 1 file changed, 58 insertions(+), 18 deletions(-) diff --git a/pages/WellnessResourceHub.py b/pages/WellnessResourceHub.py index 76d3a09..adb7272 100644 --- a/pages/WellnessResourceHub.py +++ b/pages/WellnessResourceHub.py @@ -2,6 +2,7 @@ import random import pandas as pd from datetime import datetime +import uuid st.set_page_config(page_title="Wellness Resource Hub", layout="wide") @@ -188,16 +189,25 @@ # Initialize or migrate session state for tasks if "tasks" not in st.session_state: st.session_state.tasks = [] + st.session_state.editing_task_id = None + st.session_state.edited_task_text = "" # Simple migration from old format (list of strings) to new format (list of dicts) elif st.session_state.tasks and isinstance(st.session_state.tasks[0], str): - st.session_state.tasks = [{"task": t, "completed": False} for t in st.session_state.tasks] + st.session_state.tasks = [{"task": t, "completed": False, "key": str(uuid.uuid4())} for t in st.session_state.tasks] + st.session_state.editing_task_id = None + st.session_state.edited_task_text = "" + + # Ensure all existing tasks have a 'key' if they somehow don't (e.g., after a hot reload) + for task in st.session_state.tasks: + if "key" not in task: + task["key"] = str(uuid.uuid4()) # --- Task Input Form --- with st.form("new_task_form", clear_on_submit=True): new_task = st.text_input("Add a new task:") submitted = st.form_submit_button("➕ Add Task") if submitted and new_task: - st.session_state.tasks.append({"task": new_task, "completed": False}) + st.session_state.tasks.append({"task": new_task, "completed": False, "key": str(uuid.uuid4())}) st.rerun() # --- Wellness Task Suggestion Button --- @@ -215,27 +225,57 @@ progress_ratio = completed_count / total_count if total_count > 0 else 0 st.progress(progress_ratio, text=f"{completed_count}/{total_count} Tasks Completed") - # --- Task Deletion and Completion Logic --- + # --- Task Display, Edit, and Deletion Logic --- indices_to_delete = [] for i, task in enumerate(st.session_state.tasks): - col1, col2 = st.columns([0.9, 0.1]) - with col1: - # The checkbox state directly modifies the session state dictionary value - # The label now uses markdown for a strike-through effect when completed - label = f"~~{task['task']}~~" if task["completed"] else task["task"] - st.session_state.tasks[i]["completed"] = st.checkbox( - label, - value=task["completed"], - key=f"task_{i}" - ) - with col2: - if st.button("🗑️", key=f"delete_{i}", help=f"Delete task: {task['task']}"): - indices_to_delete.append(i) + if st.session_state.editing_task_id == task["key"]: + # Editing mode + col_edit_input, col_edit_save, col_edit_cancel = st.columns([0.7, 0.15, 0.15]) + with col_edit_input: + st.session_state.edited_task_text = st.text_input( + "Edit Task:", + value=st.session_state.edited_task_text, + key=f"edit_input_{task['key']}", + label_visibility="collapsed" + ) + with col_edit_save: + if st.button("💾 Save", key=f"save_edit_{task['key']}"): + # Find the task by key and update its text + for t in st.session_state.tasks: + if t["key"] == task["key"]: + t["task"] = st.session_state.edited_task_text + break + st.session_state.editing_task_id = None + st.session_state.edited_task_text = "" + st.rerun() + with col_edit_cancel: + if st.button("❌ Cancel", key=f"cancel_edit_{task['key']}"): + st.session_state.editing_task_id = None + st.session_state.edited_task_text = "" + st.rerun() + else: + # Normal display mode + col_checkbox, col_edit_btn, col_delete_btn = st.columns([0.7, 0.15, 0.15]) + with col_checkbox: + label = f"~~{task['task']}~~" if task["completed"] else task["task"] + st.session_state.tasks[i]["completed"] = st.checkbox( + label, + value=task["completed"], + key=f"task_{task['key']}" # Use task key for unique widget key + ) + with col_edit_btn: + if st.button("✏️ Edit", key=f"edit_btn_{task['key']}"): + st.session_state.editing_task_id = task["key"] + st.session_state.edited_task_text = task["task"] + st.rerun() + with col_delete_btn: + if st.button("🗑️", key=f"delete_btn_{task['key']}", help=f"Delete task: {task['task']}"): + indices_to_delete.append(i) # Perform deletions after iterating through the list if indices_to_delete: - for i in sorted(indices_to_delete, reverse=True): - del st.session_state.tasks[i] + # Delete tasks by key to avoid issues with re-indexing + st.session_state.tasks = [t for i, t in enumerate(st.session_state.tasks) if i not in indices_to_delete] st.rerun() if not st.session_state.tasks: From 5e329cce01c9cc05048033a0e715fe563b71d7bd Mon Sep 17 00:00:00 2001 From: Akshay Date: Wed, 1 Oct 2025 08:52:46 +0530 Subject: [PATCH 3/3] feat(Daily Planner): add celebration for completing all tasks Show balloons and success message when all tasks are marked as completed to provide positive reinforcement --- pages/WellnessResourceHub.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pages/WellnessResourceHub.py b/pages/WellnessResourceHub.py index adb7272..f476f8c 100644 --- a/pages/WellnessResourceHub.py +++ b/pages/WellnessResourceHub.py @@ -225,6 +225,11 @@ progress_ratio = completed_count / total_count if total_count > 0 else 0 st.progress(progress_ratio, text=f"{completed_count}/{total_count} Tasks Completed") + # --- Celebrate Completion --- + if completed_count > 0 and completed_count == total_count: + st.balloons() + st.success("🎉 All tasks completed! Great job!") + # --- Task Display, Edit, and Deletion Logic --- indices_to_delete = [] for i, task in enumerate(st.session_state.tasks):