import { InputError, parseInput } from './lib/validate.ts' import { byField, idField } from './lib/fields.ts' import { line, mutateTodo, normalizeId, resolveTimeZone } from './lib/store.ts' /** * Reopen a done todo/task, or restore a deleted (archived) one, in the shared todo list. * * @param input - `{ id: string, by: string }` * @returns `{ todo, line }` * * @example * import reopenTodo from 'kody:@charlesmatte/todos/reopen' * * await reopenTodo({ id: 'T12', by: 'assistant' }) */ export default async function reopenTodo(input: unknown) { const p = parseInput<{ id: string; by: string }>(input, { id: idField, by: byField }, 'todos/reopen') const todo = await mutateTodo(normalizeId(p.id), p.by, 'reopened', (t) => { if (t.status === 'open' && !t.deleted) throw new InputError(`${t.id} is already open.`) const changes = { status: t.status, deleted: t.deleted } t.status = 'open' t.completedAt = null t.deleted = false t.deletedAt = null return { from: changes } }) return { todo, line: line(todo, await resolveTimeZone()) } }