summaryrefslogtreecommitdiff
path: root/lib/tasks/utils.ts
blob: aaa1184c4e99b86b549eae9d0ed36a6a6a6aba2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import { tasks, type Task } from "@/db/schema/tasks"
import { faker } from "@faker-js/faker"
import {
  Activity,
  AlertCircle,
  AlertTriangle,
  ArrowDownIcon,
  ArrowRightIcon,
  ArrowUpIcon,
  AwardIcon,
  BadgeCheck,
  CheckCircle2,
  CircleHelp,
  CircleIcon,
  CircleX,
  ClipboardCheck,
  ClipboardList,
  FileCheck2,
  FilePenLine,
  FileX2,
  MailCheck,
  PencilIcon,
  SearchIcon,
  SendIcon,
  Timer,
  Trash2,
  XCircle,
} 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
}