feat: focus item detail page with inline note + checklist

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 20:03:00 +00:00
parent 73d44ef804
commit 8f66094365
9 changed files with 365 additions and 17 deletions

View File

@@ -74,6 +74,7 @@ async def create_form(
project_id: Optional[str] = None,
task_id: Optional[str] = None,
meeting_id: Optional[str] = None,
focus_id: Optional[str] = None,
db: AsyncSession = Depends(get_db),
):
sidebar = await get_sidebar_data(db)
@@ -93,6 +94,7 @@ async def create_form(
"prefill_project_id": project_id or "",
"prefill_task_id": task_id or "",
"prefill_meeting_id": meeting_id or "",
"prefill_focus_id": focus_id or "",
})
@@ -100,11 +102,12 @@ async def create_form(
async def create_list(
request: Request,
name: str = Form(...),
domain_id: str = Form(...),
domain_id: Optional[str] = Form(None),
area_id: Optional[str] = Form(None),
project_id: Optional[str] = Form(None),
task_id: Optional[str] = Form(None),
meeting_id: Optional[str] = Form(None),
focus_id: Optional[str] = Form(None),
list_type: str = Form("checklist"),
description: Optional[str] = Form(None),
tags: Optional[str] = Form(None),
@@ -112,10 +115,12 @@ async def create_list(
):
repo = BaseRepository("lists", db)
data = {
"name": name, "domain_id": domain_id,
"name": name,
"list_type": list_type,
"description": description,
}
if domain_id and domain_id.strip():
data["domain_id"] = domain_id
if area_id and area_id.strip():
data["area_id"] = area_id
if project_id and project_id.strip():
@@ -124,6 +129,8 @@ async def create_list(
data["task_id"] = task_id
if meeting_id and meeting_id.strip():
data["meeting_id"] = meeting_id
if focus_id and focus_id.strip():
data["focus_id"] = focus_id
if tags and tags.strip():
data["tags"] = [t.strip() for t in tags.split(",") if t.strip()]
@@ -132,6 +139,8 @@ async def create_list(
return RedirectResponse(url=f"/tasks/{task_id}?tab=lists", status_code=303)
if meeting_id and meeting_id.strip():
return RedirectResponse(url=f"/meetings/{meeting_id}?tab=lists", status_code=303)
if focus_id and focus_id.strip():
return RedirectResponse(url=f"/focus/{focus_id}?tab=lists", status_code=303)
return RedirectResponse(url=f"/lists/{new_list['id']}", status_code=303)