Summary of Fixes

Issue 1: Slot Name Mismatch
  - Equipment modal used armor, accessory but API uses chest, accessory_1
  - Updated to all 8 API slots: weapon, off_hand, helmet, chest, gloves, boots, accessory_1, accessory_2

  Issue 2: HTMX Request Not Firing (the real blocker)
  - onclick=closeModal() was removing the button from DOM before HTMX could send the request
  - Changed to hx-on::after-request=closeModal() so modal closes after the request completes
This commit is contained in:
2025-11-29 18:25:30 -06:00
parent 72cf92021e
commit 06ef8f6f0b
4 changed files with 27 additions and 376 deletions

View File

@@ -1323,6 +1323,10 @@ def inventory_equip(session_id: str):
if not item_id:
return '<div class="error">No item selected</div>', 400
if not slot:
logger.warning("equip_missing_slot", item_id=item_id)
return '<div class="error">No equipment slot specified</div>', 400
try:
# Get session to find character
session_response = client.get(f'/api/v1/sessions/{session_id}')
@@ -1333,17 +1337,14 @@ def inventory_equip(session_id: str):
return '<div class="error">No character found</div>', 400
# Equip the item via API
payload = {'item_id': item_id}
if slot:
payload['slot'] = slot
payload = {'item_id': item_id, 'slot': slot}
client.post(f'/api/v1/characters/{character_id}/inventory/equip', payload)
# Return updated character panel
return redirect(url_for('game.character_panel', session_id=session_id))
except APIError as e:
logger.error("failed_to_equip_item", session_id=session_id, item_id=item_id, error=str(e))
logger.error("failed_to_equip_item", session_id=session_id, item_id=item_id, slot=slot, error=str(e))
return f'<div class="error">Failed to equip item: {e}</div>', 500