Export template source from 1a4fa8f940f1ce3bd18662c28f1e9e9ca452e6cd:quixos-instance/packages/todo-runtime
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
import { servePackageRuntime } from "@quixos/camino-package-runtime";
|
||||
import {
|
||||
archive,
|
||||
complete,
|
||||
createTask,
|
||||
displayLabel,
|
||||
reopen,
|
||||
searchDocument,
|
||||
stopWatch,
|
||||
} from "./task.impl.js";
|
||||
|
||||
servePackageRuntime({
|
||||
packageRevisionId: "package:todo-runtime@1",
|
||||
exports: {
|
||||
"export:todo-runtime:complete": complete,
|
||||
"export:todo-runtime:reopen": reopen,
|
||||
"export:todo-runtime:archive": archive,
|
||||
"export:todo-runtime:display-label-get": displayLabel,
|
||||
"export:todo-runtime:display-label-watch": displayLabel,
|
||||
"export:todo-runtime:display-label-watch-stop": stopWatch,
|
||||
"export:todo-runtime:search-document-get": searchDocument,
|
||||
"export:todo-runtime:search-document-watch": searchDocument,
|
||||
"export:todo-runtime:search-document-watch-stop": stopWatch,
|
||||
"export:todo-runtime:create-task": createTask,
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,57 @@
|
||||
import { derived, type RuntimeContext } from "@quixos/camino-package-runtime";
|
||||
|
||||
const status = (context: RuntimeContext) =>
|
||||
context.state<string>("port:todo-actions:status");
|
||||
|
||||
export const complete = async (context: RuntimeContext) => {
|
||||
await status(context).set("DONE");
|
||||
return "DONE";
|
||||
};
|
||||
|
||||
export const reopen = async (context: RuntimeContext) => {
|
||||
await status(context).set("OPEN");
|
||||
return "OPEN";
|
||||
};
|
||||
|
||||
export const archive = async (context: RuntimeContext) => {
|
||||
await status(context).set("ARCHIVED");
|
||||
return "ARCHIVED";
|
||||
};
|
||||
|
||||
export const displayLabel = derived(
|
||||
async (context) => {
|
||||
const [title, status, priority] = await Promise.all([
|
||||
context.state<string>("port:todo-label:title").get(),
|
||||
context.state<string>("port:todo-label:status").get(),
|
||||
context.state<string>("port:todo-label:priority").get(),
|
||||
]);
|
||||
const statusText = status ?? "OPEN";
|
||||
const priorityText =
|
||||
priority && priority !== "NORMAL" ? ` ${priority.toLowerCase()}` : "";
|
||||
return `[${statusText}]${priorityText} ${title ?? "Untitled task"}`;
|
||||
},
|
||||
);
|
||||
|
||||
export const searchDocument = derived(async (context) => {
|
||||
const [title, status, priority, dueDate] = await Promise.all([
|
||||
context.state<string>("port:todo-search:title").get(),
|
||||
context.state<string>("port:todo-search:status").get(),
|
||||
context.state<string>("port:todo-search:priority").get(),
|
||||
context.state<string>("port:todo-search:due-date").get(),
|
||||
]);
|
||||
return {
|
||||
title: title || "Untitled task",
|
||||
subtitle: `Task · ${status || "OPEN"}${dueDate ? ` · due ${dueDate}` : ""}`,
|
||||
keywords: ["task", status || "open", priority || "normal", dueDate || ""],
|
||||
};
|
||||
});
|
||||
|
||||
export const createTask = async (context: RuntimeContext) => {
|
||||
const title = typeof context.input.value === "string" && context.input.value.trim()
|
||||
? context.input.value.trim()
|
||||
: "Untitled task";
|
||||
await context.state<string>("port:todo-constructor:title").set(title);
|
||||
return context.objectId;
|
||||
};
|
||||
|
||||
export const stopWatch = () => null;
|
||||
Reference in New Issue
Block a user