-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathkanban.py
More file actions
70 lines (59 loc) · 2.2 KB
/
kanban.py
File metadata and controls
70 lines (59 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Kanban Board App using Streamlit
# Ensure you run this locally with `streamlit run kanban.py`
import os
import json
import streamlit as st
import uuid
st.set_page_config(page_title="Kanban Board", layout="wide")
st.title("🗂️ Simple Kanban Board")
KANBAN_FILE = "kanban_data.json"
def load_kanban():
if os.path.exists(KANBAN_FILE):
with open(KANBAN_FILE, "r") as f:
return json.load(f)
return {
"To Do": [],
"In Progress": [],
"Done": []
}
def save_kanban(data):
with open(KANBAN_FILE, "w") as f:
json.dump(data, f, indent=2)
# Initialize session state if not already set
if "kanban_data" not in st.session_state:
st.session_state.kanban_data = load_kanban()
columns = list(st.session_state.kanban_data.keys())
# Form to add new tasks
with st.form("new_task_form"):
st.subheader("➕ Add New Task")
new_task = st.text_input("Task name")
column_choice = st.selectbox("Select column", columns)
submitted = st.form_submit_button("Add Task")
if submitted and new_task.strip():
task_id = str(uuid.uuid4())
st.session_state.kanban_data[column_choice].append({"id": task_id, "name": new_task.strip()})
save_kanban(st.session_state.kanban_data)
st.experimental_rerun()
# Reset board button
if st.button("🗑️ Reset All Tasks"):
st.session_state.kanban_data = {
"To Do": [],
"In Progress": [],
"Done": []
}
save_kanban(st.session_state.kanban_data)
st.experimental_rerun()
# Display columns
cols = st.columns(len(columns))
for i, col in enumerate(columns):
with cols[i]:
st.subheader(col)
for task in st.session_state.kanban_data[col]:
with st.container():
st.markdown(f"- {task['name']}")
move_to = st.selectbox(f"Move to:", ["-"] + columns, key=task['id'])
if move_to != "-" and move_to != col:
st.session_state.kanban_data[col] = [t for t in st.session_state.kanban_data[col] if t['id'] != task['id']]
st.session_state.kanban_data[move_to].append(task)
save_kanban(st.session_state.kanban_data)
st.experimental_rerun()