1import { ODTicketStatus } from "@/types/doctypes";
2import { createListResource } from "frappe-ui";
3import { defineStore } from "pinia";
4import { statusDotClass as parseColor } from "@opendesk/shared/ticketStatus";
5
6export { parseColor };
7
8export const useTicketStatusStore = defineStore("ticketStatus", () => {
9 const statuses = createListResource({
10 doctype: "OD Ticket Status",
11 cache: ["OD Ticket Status", "list"],
12 fields: [
13 "label_agent",
14 "label_customer",
15 "order",
16 "different_view",
17 "category",
18 "color",
19 "enabled",
20 ],
21 orderBy: "`tabOD Ticket Status`.order",
22 pageLength: 1000,
23 auto: true,
24 transform: (data: ODTicketStatus[]) => {
25 return data.map((d) => {
26 if (!d.different_view) {
27 d.label_customer = d.label_agent;
28 }
29 d["parsed_color"] = parseColor(d.color);
30 return d;
31 });
32 },
33 });
34
35 function getStatus(label: string): ODTicketStatus | undefined {
36 return statuses.data?.find(
37 (s: ODTicketStatus) =>
38 s.label_agent === label || s.label_customer === label
39 );
40 }
41 const colorMap = {
42 Green: ["text-ink-green-6", "bg-surface-green-2"],
43 Black: ["text-ink-gray-9", "bg-surface-gray-2"],
44 Gray: ["text-ink-gray-7", "bg-surface-gray-2"],
45 Blue: ["text-ink-blue-6", "bg-surface-blue-2"],
46 Red: ["text-ink-red-6", "bg-surface-red-1"],
47 Pink: ["text-ink-pink-1", "bg-surface-pink-1"],
48 Orange: ["text-ink-orange-6", "bg-surface-orange-1"],
49 Amber: ["text-ink-amber-6", "bg-surface-amber-2"],
50 Yellow: ["text-ink-yellow-6", "bg-surface-amber-2"],
51 Cyan: ["text-ink-cyan-6", "bg-surface-cyan-1"],
52 Teal: ["text-ink-teal-6", "bg-surface-teal-1"],
53 Violet: ["text-ink-violet-6", "bg-surface-violet-1"],
54 Purple: ["text-ink-purple-6", "bg-surface-purple-1"],
55 Default: ["text-ink-gray-9", "bg-surface-gray-2"],
56 };
57
58 return {
59 statuses,
60 colorMap,
61 getStatus,
62 };
63});
64