33 lines
1.6 KiB
TypeScript
33 lines
1.6 KiB
TypeScript
import type { Contexts } from "./gen/qx.js";
|
|||
|
|
|
||
|
|
export const complete = async ({ ports }: Contexts["complete"]) => {
|
||
|
|
await ports.data["status.set"]("DONE");
|
||
|
|
return "DONE";
|
||
|
|
};
|
||
|
|
export const reopen = async ({ ports }: Contexts["reopen"]) => {
|
||
|
|
await ports.data["status.set"]("OPEN");
|
||
|
|
return "OPEN";
|
||
|
|
};
|
||
|
|
export const archive = async ({ ports }: Contexts["archive"]) => {
|
||
|
|
await ports.data["status.set"]("ARCHIVED");
|
||
|
|
return "ARCHIVED";
|
||
|
|
};
|
||
|
|
export const displayLabel = { kind: "derived" as const, get: async ({ ports }: Contexts["displayLabelGet"]) => {
|
||
|
|
const [title, status, priority] = await Promise.all([ports.data["title.get"](), ports.data["status.get"](), ports.data["priority.get"]()]);
|
||
|
|
const priorityText = priority && priority !== "NORMAL" ? ` ${priority.toLowerCase()}` : "";
|
||
|
|
return `[${status || "OPEN"}]${priorityText} ${title || "Untitled task"}`;
|
||
|
|
}};
|
||
|
|
export const searchDocument = { kind: "derived" as const, get: async ({ ports }: Contexts["searchDocumentGet"]) => {
|
||
|
|
const [title, status, priority, dueDate] = await Promise.all([ports.data["title.get"](), ports.data["status.get"](), ports.data["priority.get"](), ports.data["dueDate.get"]()]);
|
||
|
|
return {
|
||
|
|
title: title || "Untitled task",
|
||
|
|
subtitle: `Task · ${status || "OPEN"}${dueDate ? ` · due ${dueDate}` : ""}`,
|
||
|
|
keywords: ["task", status || "open", priority || "normal", dueDate || ""],
|
||
|
|
};
|
||
|
|
}};
|
||
|
|
export const createTask = async ({ ports, input, objectId }: Contexts["createTask"]) => {
|
||
|
|
await ports.data["title.set"](input.trim() || "Untitled task");
|
||
|
|
return objectId;
|
||
|
|
};
|
||
|
|
export const stopWatch = () => null;
|