diff options
Diffstat (limited to 'lib/tasks/utils.ts')
| -rw-r--r-- | lib/tasks/utils.ts | 80 |
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 +} |
