|
34 | 34 | st.sidebar.error(f"Verification Failed:\n{res2.stdout}") |
35 | 35 |
|
36 | 36 | 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): |
39 | 39 | col1, col2, col3 = st.columns([3, 2, 1]) |
40 | 40 | 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 | + |
44 | 50 | 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 | + |
46 | 53 | with col3: |
47 | 54 | 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() |
50 | 60 |
|
51 | 61 | 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] |
53 | 90 | 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() |
55 | 97 |
|
56 | 98 | # --- Page Rendering --- |
57 | 99 |
|
@@ -127,9 +169,16 @@ def edit_list(data_list, key_prefix): |
127 | 169 | # Nested data management outside the form |
128 | 170 | if page == "Quests": |
129 | 171 | st.subheader("📦 Requirements") |
130 | | - item["Requirements"] = edit_list(item["Requirements"], "req") |
| 172 | + edit_list(item["Requirements"], "req") |
| 173 | + |
131 | 174 | 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") |
133 | 182 |
|
134 | 183 | if st.button("🔥 Delete Entity", type="secondary"): |
135 | 184 | manager.unified_data[page.lower()].remove(item) |
|
0 commit comments