tasks: assign a task to a specific person

Backend: add tasks.assignee_user_id (nullable, fk user) + migration; persist
it through create/update and surface tasks to the assigned person in listTasks.

Frontend: New Task dialog gains a three-way Assignee control
(Myself / Department / Person) with a provider picker from /api/staff/providers;
task card + detail show the assignee's name when set.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Khalid Abdi
2026-06-20 18:40:56 +03:00
parent 1d9b1b1d22
commit bbc6869745
11 changed files with 4131 additions and 20 deletions
+10 -3
View File
@@ -669,12 +669,17 @@
"priorityLabel": "Priority",
"statusLabel": "Status",
"cancel": "Cancel",
"add": "Add task"
"add": "Add task",
"assigneeDepartment": "Department",
"assigneePerson": "Person",
"person": "Team member",
"personEmpty": "No clinicians available to assign."
},
"list": {
"forDept": "For {{dept}}",
"personal": "Personal",
"byCreator": "by {{name}}"
"byCreator": "by {{name}}",
"forPerson": "For {{name}}"
},
"detail": {
"fallbackTitle": "Task",
@@ -710,7 +715,9 @@
"addFailedTitle": "Couldn't add task",
"addFailedBody": "Please try again.",
"updateFailedTitle": "Couldn't update task",
"updateFailedBody": "Please try again."
"updateFailedBody": "Please try again.",
"needPersonTitle": "Pick a team member",
"needPersonBody": "Choose who this task is for."
}
},
"meetings": {
+3
View File
@@ -12,6 +12,8 @@ export type Task = {
assignee: string;
// Department (member role) the task is assigned to; null = personal task.
assigneeRole: string | null;
// A specific person the task is assigned to (user id); null otherwise.
assigneeUserId: string | null;
due: string;
priority: Priority;
status: TaskStatus;
@@ -29,6 +31,7 @@ export type TaskInput = {
title: string;
assignee?: string;
assigneeRole?: string | null;
assigneeUserId?: string | null;
due?: string;
priority?: Priority;
status?: TaskStatus;