Skip to content

Commit ea0ec04

Browse files
committed
Improve CRUD stability and add support for stat requirements/rewards
1 parent 4995f91 commit ea0ec04

1 file changed

Lines changed: 61 additions & 12 deletions

File tree

modules/contentManager/app.py

Lines changed: 61 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,66 @@
3434
st.sidebar.error(f"Verification Failed:\n{res2.stdout}")
3535

3636
def edit_list(data_list, key_prefix):
37-
new_list = []
38-
for i, item in enumerate(data_list):
37+
to_delete = None
38+
for i, entry in enumerate(data_list):
3939
col1, col2, col3 = st.columns([3, 2, 1])
4040
with col1:
41-
name = st.selectbox(f"Item {i}", [i["Name"] for i in manager.unified_data["items"]],
42-
index=[i["Name"] for i in manager.unified_data["items"]].index(item["Item"]) if item["Item"] in [i["Name"] for i in manager.unified_data["items"]] else 0,
43-
key=f"{key_prefix}_name_{i}")
41+
# Safely find index of current item
42+
item_names = [it["Name"] for i in [manager.unified_data["items"]] for it in i]
43+
current_index = 0
44+
if entry["Item"] in item_names:
45+
current_index = item_names.index(entry["Item"])
46+
47+
new_name = st.selectbox(f"Item {i}", item_names, index=current_index, key=f"{key_prefix}_name_{i}")
48+
entry["Item"] = new_name
49+
4450
with col2:
45-
qty = st.number_input(f"Qty {i}", value=item["Quantity"], min_value=1, key=f"{key_prefix}_qty_{i}")
51+
entry["Quantity"] = st.number_input(f"Qty {i}", value=entry["Quantity"], min_value=1, key=f"{key_prefix}_qty_{i}")
52+
4653
with col3:
4754
if st.button("🗑️", key=f"{key_prefix}_del_{i}"):
48-
continue
49-
new_list.append({"Item": name, "Quantity": qty})
55+
to_delete = i
56+
57+
if to_delete is not None:
58+
data_list.pop(to_delete)
59+
st.rerun()
5060

5161
if st.button("➕ Add Entry", key=f"{key_prefix}_add"):
52-
new_list.append({"Item": manager.unified_data["items"][0]["Name"], "Quantity": 1})
62+
data_list.append({"Item": manager.unified_data["items"][0]["Name"], "Quantity": 1})
63+
st.rerun()
64+
65+
def edit_dict_list(data_dict, key_prefix, label_name="Stat"):
66+
to_delete = None
67+
keys = list(data_dict.keys())
68+
for i, key in enumerate(keys):
69+
col1, col2, col3 = st.columns([3, 2, 1])
70+
with col1:
71+
stat_names = [s["Name"] for s in manager.unified_data["stats"]]
72+
current_index = 0
73+
if key in stat_names:
74+
current_index = stat_names.index(key)
75+
76+
new_key = st.selectbox(f"{label_name} {i}", stat_names, index=current_index, key=f"{key_prefix}_key_{i}")
77+
if new_key != key:
78+
data_dict[new_key] = data_dict.pop(key)
79+
st.rerun()
80+
81+
with col2:
82+
data_dict[new_key] = st.number_input(f"Value {i}", value=data_dict[new_key], key=f"{key_prefix}_val_{i}")
83+
84+
with col3:
85+
if st.button("🗑️", key=f"{key_prefix}_del_{i}"):
86+
to_delete = key
87+
88+
if to_delete is not None:
89+
del data_dict[to_delete]
5390
st.rerun()
54-
return new_list
91+
92+
if st.button(f"➕ Add {label_name}", key=f"{key_prefix}_add"):
93+
available = [s["Name"] for s in manager.unified_data["stats"] if s["Name"] not in data_dict]
94+
if available:
95+
data_dict[available[0]] = 1
96+
st.rerun()
5597

5698
# --- Page Rendering ---
5799

@@ -127,9 +169,16 @@ def edit_list(data_list, key_prefix):
127169
# Nested data management outside the form
128170
if page == "Quests":
129171
st.subheader("📦 Requirements")
130-
item["Requirements"] = edit_list(item["Requirements"], "req")
172+
edit_list(item["Requirements"], "req")
173+
131174
st.subheader("💎 Rewards")
132-
item["Rewards"] = edit_list(item["Rewards"], "rew")
175+
edit_list(item["Rewards"], "rew")
176+
177+
st.subheader("🛡️ Required Stats")
178+
edit_dict_list(item["RequiredStats"], "req_stat")
179+
180+
st.subheader("📈 Stat Rewards")
181+
edit_dict_list(item["StatRewards"], "rew_stat")
133182

134183
if st.button("🔥 Delete Entity", type="secondary"):
135184
manager.unified_data[page.lower()].remove(item)

0 commit comments

Comments
 (0)