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 }