feat: improve draft admin UI, draft state sync, and styling

Major refactor of Draft admin and participant Websocket state sync
Use consistent state dict serialization in DraftStateManager (to_dict, dict-like access, etc.)
Always include up-to-date participants and draft status in sync payloads
Draft phase/order summary now sent as objects instead of calling .get_summary()
UI/UX updates:
Updated DraftAdmin.jsx:
Connects DraftParticipant panel for real-time participant state
Centralizes phase advance, bidding, and sync controls
Moves phase selector into a dedicated panel
Refine markup/extends in room_admin.dj.html (use block body, fix root data attribute)
Minor fixes to DraftCountdownClock.jsx to robustly handle NaN time
CSS/layout:
Refactor .draft-participant styling to .wrapper within #draft-participant-root and #draft-admin-root for better responsive layout and code clarity
Server code:
Simplify draft consumer/manager state interaction, drop unused cache keys, update order determination and phase management, and ensure DRY status object responses
Small code style and consistency cleanups
Misc:
Add debugpy launch task in code-workspace and clean workspace JSON (style/consistency)
Minor formatting and error handling improvements
This commit is contained in:
2025-08-15 11:06:27 -05:00
parent 71f0f01abc
commit 9ddc8663a9
9 changed files with 193 additions and 167 deletions

View File

@@ -7,6 +7,18 @@
"launch": {
"version": "0.2.0",
"configurations": [
{
"name": "Debug current file with debugpy",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": false,
"args": [],
"env": {
"PYTHONPATH": "${workspaceFolder}"
}
},
{
"name": "Run Django Server",
"type": "debugpy",
@@ -22,7 +34,7 @@
"type": "debugpy",
"request": "launch",
"module": "uvicorn",
"args": ["boxofficefantasy_project.asgi:application", "--reload",],
"args": ["boxofficefantasy_project.asgi:application", "--reload"],
"django": true,
"console": "integratedTerminal",
"envFile": "${workspaceFolder}/.env"
@@ -32,10 +44,7 @@
"type": "node",
"request": "launch",
"runtimeExecutable": "npm",
"args": [
"run",
"dev"
],
"args": ["run", "dev"],
"cwd": "${workspaceFolder}/frontend",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
@@ -62,7 +71,11 @@
"compounds": [
{
"name": "Django + Chrome + Webpack",
"configurations": ["Run Django Server", "Launch Chrome", "Start Webpack Dev Server"],
"configurations": [
"Run Django Server",
"Launch Chrome",
"Start Webpack Dev Server"
],
"type": "compound"
}
]
@@ -152,7 +165,7 @@
"editor.defaultFormatter": "ms-python.black-formatter"
},
"[django-html]": {
"editor.defaultFormatter": "monosans.djlint",
"editor.defaultFormatter": "monosans.djlint"
},
"emmet.includeLanguages": {
"django-html": "html"
@@ -161,15 +174,13 @@
"*.dj.html": "django-html"
},
"files.exclude": {
"**/__pycache__":true,
".venv":false
"**/__pycache__": true,
".venv": false
},
"auto-close-tag.activationOnLanguage": [
"django-html"
],
"auto-close-tag.activationOnLanguage": ["django-html"],
"terminal.integrated.env.osx": {
"VSCODE_HISTFILE":"${workspaceFolder}/.venv/.term_history"
},
"VSCODE_HISTFILE": "${workspaceFolder}/.venv/.term_history"
}
// "html.autoClosingTags": true,
}
}