41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import type { Task } from './db'
|
|
|
|
export type TaskStatus = Task['status']
|
|
|
|
function hasAssignee(assignedTo: string | null | undefined): boolean {
|
|
return Boolean(assignedTo && assignedTo.trim())
|
|
}
|
|
|
|
/**
|
|
* Keep task state coherent when a task is created with an assignee.
|
|
* If caller asks for `inbox` but also sets `assigned_to`, normalize to `assigned`.
|
|
*/
|
|
export function normalizeTaskCreateStatus(
|
|
requestedStatus: TaskStatus | undefined,
|
|
assignedTo: string | undefined
|
|
): TaskStatus {
|
|
const status = requestedStatus ?? 'inbox'
|
|
if (status === 'inbox' && hasAssignee(assignedTo)) return 'assigned'
|
|
return status
|
|
}
|
|
|
|
/**
|
|
* Auto-adjust status for assignment-only updates when caller does not
|
|
* explicitly request a status transition.
|
|
*/
|
|
export function normalizeTaskUpdateStatus(args: {
|
|
currentStatus: TaskStatus
|
|
requestedStatus: TaskStatus | undefined
|
|
assignedTo: string | null | undefined
|
|
assignedToProvided: boolean
|
|
}): TaskStatus | undefined {
|
|
const { currentStatus, requestedStatus, assignedTo, assignedToProvided } = args
|
|
if (requestedStatus !== undefined) return requestedStatus
|
|
if (!assignedToProvided) return undefined
|
|
|
|
if (hasAssignee(assignedTo) && currentStatus === 'inbox') return 'assigned'
|
|
if (!hasAssignee(assignedTo) && currentStatus === 'assigned') return 'inbox'
|
|
return undefined
|
|
}
|
|
|