feat: fix wizard step-skip bug + extend case edit with all fields + Paperclip title sync
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m38s
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m38s
- Fix keyboard navigation bug: React was reusing the submit button DOM element when transitioning "הבא" → "צור תיק", retaining focus and causing Enter to auto-submit step 3. Added key props to force element replacement. - CaseEditDialog now covers all wizard fields: appellants, respondents, property_address, permit_number (in addition to existing title, subject, hearing_date, expected_outcome, notes). - When case title changes, Paperclip project name is updated in background via new update_project_name() in paperclip_client.py. - Extended CaseUpdateRequest, case_update MCP tool, and caseUpdateSchema to carry the new fields end-to-end. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
17
web/app.py
17
web/app.py
@@ -1240,6 +1240,10 @@ class CaseUpdateRequest(BaseModel):
|
||||
decision_date: str = ""
|
||||
tags: list[str] | None = None
|
||||
expected_outcome: str = ""
|
||||
appellants: list[str] | None = None
|
||||
respondents: list[str] | None = None
|
||||
property_address: str = ""
|
||||
permit_number: str = ""
|
||||
|
||||
|
||||
@app.post("/api/cases/create")
|
||||
@@ -1383,12 +1387,25 @@ async def api_case_update(case_number: str, req: CaseUpdateRequest, background_t
|
||||
decision_date=req.decision_date,
|
||||
tags=req.tags,
|
||||
expected_outcome=req.expected_outcome,
|
||||
appellants=req.appellants,
|
||||
respondents=req.respondents,
|
||||
property_address=req.property_address,
|
||||
permit_number=req.permit_number,
|
||||
)
|
||||
try:
|
||||
parsed = json.loads(result)
|
||||
except json.JSONDecodeError:
|
||||
raise HTTPException(404, result)
|
||||
|
||||
# Paperclip sync: update project name when title changes (fire-and-forget).
|
||||
old_title = (existing or {}).get("title", "")
|
||||
if req.title and req.title != old_title:
|
||||
background_tasks.add_task(
|
||||
paperclip_client.update_project_name,
|
||||
case_number=case_number,
|
||||
new_title=req.title,
|
||||
)
|
||||
|
||||
# Emit webhook when status changes (fire-and-forget via BackgroundTasks).
|
||||
new_status = req.status
|
||||
if new_status and old_status != new_status:
|
||||
|
||||
@@ -231,6 +231,21 @@ async def restore_project(case_number: str) -> dict:
|
||||
await conn.close()
|
||||
|
||||
|
||||
async def update_project_name(case_number: str, new_title: str) -> None:
|
||||
"""Update the Paperclip project name when a case title changes."""
|
||||
project_name = f"ערר {case_number} — {new_title}"[:200]
|
||||
conn = await asyncpg.connect(PAPERCLIP_DB_URL)
|
||||
try:
|
||||
await conn.execute(
|
||||
"UPDATE projects SET name = $1, updated_at = now() WHERE name LIKE $2",
|
||||
project_name, f"%{case_number}%",
|
||||
)
|
||||
except Exception:
|
||||
logger.warning("Failed to update Paperclip project name for case %s", case_number)
|
||||
finally:
|
||||
await conn.close()
|
||||
|
||||
|
||||
async def _ensure_default_workspace(
|
||||
conn: asyncpg.Connection,
|
||||
project_id: str,
|
||||
|
||||
Reference in New Issue
Block a user