feat: drag-and-drop reorder for daily focus items

Add HTML5 drag-and-drop within domain groups on the focus page.
Items can be dragged to reorder within their domain; cross-domain
drag is prevented. Uses hidden form POST (no fetch/XHR). Arrow
buttons kept as fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-03 15:58:05 +00:00
parent 4c072beec0
commit 1a6b3fac1d
3 changed files with 94 additions and 2 deletions

View File

@@ -222,6 +222,20 @@ async def reorder_focus(
return RedirectResponse(url=f"/focus?focus_date={focus_date}", status_code=303)
@router.post("/reorder-all")
async def reorder_all_focus(
request: Request,
item_ids: str = Form(...),
focus_date: str = Form(...),
db: AsyncSession = Depends(get_db),
):
repo = BaseRepository("daily_focus", db)
ids = [i.strip() for i in item_ids.split(",") if i.strip()]
if ids:
await repo.reorder(ids)
return RedirectResponse(url=f"/focus?focus_date={focus_date}", status_code=303)
@router.post("/{focus_id}/toggle")
async def toggle_focus(focus_id: str, request: Request, db: AsyncSession = Depends(get_db)):
repo = BaseRepository("daily_focus", db)