feat: universal reorder grip handles and compact UI density
- Add generic move_in_order() to BaseRepository for reorder support - Add reusable reorder_arrows.html partial with grip dot handles - Add reorder routes to all 9 list routers (tasks, notes, links, contacts, meetings, decisions, appointments, lists, focus) - Compact row padding (6px 12px, gap 8px) on .list-row and .focus-item - Reduce font size to 0.80rem on row titles, sidebar nav, domain tree Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -332,3 +332,35 @@ async def remove_contact(
|
||||
"DELETE FROM contact_lists WHERE contact_id = :cid AND list_id = :lid"
|
||||
), {"cid": contact_id, "lid": list_id})
|
||||
return RedirectResponse(url=f"/lists/{list_id}", status_code=303)
|
||||
|
||||
|
||||
@router.post("/reorder")
|
||||
async def reorder_list(
|
||||
request: Request,
|
||||
item_id: str = Form(...),
|
||||
direction: str = Form(...),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
repo = BaseRepository("lists", db)
|
||||
await repo.move_in_order(item_id, direction)
|
||||
return RedirectResponse(url=request.headers.get("referer", "/lists"), status_code=303)
|
||||
|
||||
|
||||
@router.post("/{list_id}/items/reorder")
|
||||
async def reorder_list_item(
|
||||
list_id: str,
|
||||
request: Request,
|
||||
item_id: str = Form(...),
|
||||
direction: str = Form(...),
|
||||
parent_id: Optional[str] = Form(None),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
repo = BaseRepository("list_items", db)
|
||||
filters = {"list_id": list_id}
|
||||
if parent_id:
|
||||
filters["parent_item_id"] = parent_id
|
||||
else:
|
||||
# Top-level items only (no parent)
|
||||
filters["parent_item_id"] = None
|
||||
await repo.move_in_order(item_id, direction, filters=filters)
|
||||
return RedirectResponse(url=f"/lists/{list_id}", status_code=303)
|
||||
|
||||
Reference in New Issue
Block a user