← Public packages
@charlesmatte/todos
Shared todo, task and reminder store that any of your Kody-connected agents can use.
src/reopen.ts
28 lines · 1.0 KB · TypeScriptimport { 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()) }
}