2.0 KiB
2.0 KiB
name, description
| name | description |
|---|---|
| dyolink-lab-cases | Lab Cases tab — list, filters, detail panel, assignment, card UX. Use when changing CasesPage, cases API, or case list cards. |
Lab Cases tab
UI: frontend/src/components/ui/lab/CasesPage.tsx
Backend: backend/src/modules/cases/
Shared prosthesis rows: LabCaseProsthesisGroupsList.tsx (also used in Treatment lab shipments rail)
List behavior
- Default sort:
sentAtdesc (newest first). - Auto-select: On tab open / after filter reload, select first list item if none selected; keep selection when still in list;
?caseId=URL wins. - Right panel: Always shows detail for selected case when list non-empty (loading state while fetching).
Filters (GET /cases)
| Param | Behavior |
|---|---|
prosthesisTypeCode |
Cases with ≥1 task of that prosthesis type (tasks.some) — not treatment-type filter |
clinicOrganizationId |
From URL (Today case partners chart) or dropdown |
q, sentFrom, sentTo |
Search + date range |
Filter options: GET /cases/filter-options → clinics, prosthesisTypes (distinct codes from sent-case tasks, catalog-ordered).
List card UI
Match Treatment shipment cards: patient name, clinic, colored prosthesis groups + teeth (LabCaseProsthesisGroupsList), sent date, progress bar, due-date badge, unread dot. No patient mobile on list cards.
List item shape: prosthesisGroups: { prosthesisTypeCode, teeth[] }[] from task teeth aggregation.
Detail panel
- Task assignment:
PATCH /cases/:caseId/tasks/:taskId/assign(TAB_CASES_EDIT) - Comments: shared
LabCaseCommentsPanel+tasksApicomment routes - Mark read:
POST /notifications/mark-case-readon select (Cases tab badge)
Permissions
TAB_CASES_READ / TAB_CASES_EDIT; owner always has Cases access. LabOrgGuard on routes.