summaryrefslogtreecommitdiff
path: root/lib/tasks/utils.ts
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-03-25 15:55:45 +0900
committerjoonhoekim <26rote@gmail.com>2025-03-25 15:55:45 +0900
commit1a2241c40e10193c5ff7008a7b7b36cc1d855d96 (patch)
tree8a5587f10ca55b162d7e3254cb088b323a34c41b /lib/tasks/utils.ts
initial commit
Diffstat (limited to 'lib/tasks/utils.ts')
-rw-r--r--lib/tasks/utils.ts80
1 files changed, 80 insertions, 0 deletions
diff --git a/lib/tasks/utils.ts b/lib/tasks/utils.ts
new file mode 100644
index 00000000..ea4425de
--- /dev/null
+++ b/lib/tasks/utils.ts
@@ -0,0 +1,80 @@
+import { tasks, type Task } from "@/db/schema/tasks"
+import { faker } from "@faker-js/faker"
+import {
+ ArrowDownIcon,
+ ArrowRightIcon,
+ ArrowUpIcon,
+ AwardIcon,
+ CheckCircle2,
+ CircleHelp,
+ CircleIcon,
+ CircleX,
+ PencilIcon,
+ SearchIcon,
+ SendIcon,
+ Timer,
+} from "lucide-react"
+import { customAlphabet } from "nanoid"
+
+import { generateId } from "@/lib/id"
+import { Rfq } from "@/db/schema/rfq"
+
+export function generateRandomTask(): Task {
+ return {
+ id: generateId("task"),
+ code: `TASK-${customAlphabet("0123456789", 4)()}`,
+ title: faker.hacker
+ .phrase()
+ .replace(/^./, (letter) => letter.toUpperCase()),
+ status: faker.helpers.shuffle(tasks.status.enumValues)[0] ?? "todo",
+ label: faker.helpers.shuffle(tasks.label.enumValues)[0] ?? "bug",
+ priority: faker.helpers.shuffle(tasks.priority.enumValues)[0] ?? "low",
+ archived: faker.datatype.boolean({ probability: 0.2 }),
+ createdAt: new Date(),
+ updatedAt: new Date(),
+ }
+}
+
+/**
+ * Returns the appropriate status icon based on the provided status.
+ * @param status - The status of the task.
+ * @returns A React component representing the status icon.
+ */
+export function getStatusIcon(status: Task["status"]) {
+ const statusIcons = {
+ canceled: CircleX,
+ done: CheckCircle2,
+ "in-progress": Timer,
+ todo: CircleHelp,
+ }
+
+ return statusIcons[status] || CircleIcon
+}
+
+export function getRFQStatusIcon(status: Rfq["status"]) {
+ const statusIcons = {
+ DRAFT: PencilIcon,
+ PUBLISHED: SendIcon,
+ EVALUATION: SearchIcon,
+ AWARDED: AwardIcon,
+ }
+
+
+
+ return statusIcons[status] || CircleIcon
+}
+
+/**
+ * Returns the appropriate priority icon based on the provided priority.
+ * @param priority - The priority of the task.
+ * @returns A React component representing the priority icon.
+ */
+export function getPriorityIcon(priority: Task["priority"]) {
+ const priorityIcons = {
+ high: ArrowUpIcon,
+ low: ArrowDownIcon,
+ medium: ArrowRightIcon,
+ }
+
+ return priorityIcons[priority] || CircleIcon
+}