feat: enhance keys page with grouped key display and inline editing functionality
This commit is contained in:
@@ -123,11 +123,29 @@ def _keys_context():
|
||||
|
||||
key_query += f" ORDER BY {order_by} "
|
||||
keys = conn.execute(key_query, params).fetchall()
|
||||
conn.close()
|
||||
|
||||
key_maps = {k: sorted(v) for k, v in key_maps.items()}
|
||||
|
||||
# Build info view data: all keys (unfiltered), grouped by map then unassigned.
|
||||
all_keys = conn.execute("""
|
||||
SELECT k.id, k.name, k.grid_image_url, k.wiki_url,
|
||||
r.priority, r.reason, COALESCE(r.used_in_quest, 0) AS used_in_quest
|
||||
FROM keys k
|
||||
LEFT JOIN key_ratings r ON k.id = r.key_id
|
||||
ORDER BY k.name ASC
|
||||
""").fetchall()
|
||||
conn.close()
|
||||
|
||||
# keys_by_map: list of (map_row, [key_row, ...]) sorted by map name
|
||||
keys_by_map = []
|
||||
for m in sorted(maps, key=lambda r: r["name"]):
|
||||
bucket = [k for k in all_keys if m["id"] in key_maps.get(k["id"], [])]
|
||||
keys_by_map.append((m, bucket))
|
||||
unassigned_keys = [k for k in all_keys if not key_maps.get(k["id"])]
|
||||
|
||||
return dict(keys=keys, maps=maps, key_maps=key_maps,
|
||||
map_filter=map_filter, sort=sort, show=show)
|
||||
map_filter=map_filter, sort=sort, show=show,
|
||||
keys_by_map=keys_by_map, unassigned_keys=unassigned_keys)
|
||||
|
||||
|
||||
@app.route("/keys")
|
||||
@@ -183,6 +201,23 @@ def rate_key():
|
||||
return redirect(f"{base_url}#key-{key_id}")
|
||||
|
||||
|
||||
@app.route("/rate_json", methods=["POST"])
|
||||
def rate_json():
|
||||
data = request.get_json(force=True)
|
||||
key_id = data.get("key_id")
|
||||
if not key_id:
|
||||
return jsonify({"ok": False, "error": "missing key_id"}), 400
|
||||
priority = data.get("priority") # None or int
|
||||
reason = data.get("reason", "")
|
||||
used_in_quest = 1 if data.get("used_in_quest") else 0
|
||||
map_ids = [int(m) for m in data.get("map_ids", [])]
|
||||
conn = get_db()
|
||||
_update_key(conn, key_id, priority, reason, used_in_quest, map_ids)
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return jsonify({"ok": True})
|
||||
|
||||
|
||||
def _update_key(conn, key_id, priority, reason, used_in_quest, map_ids):
|
||||
conn.execute("""
|
||||
INSERT INTO key_ratings (key_id, priority, reason, used_in_quest)
|
||||
|
||||
Reference in New Issue
Block a user