77 lines
2.1 KiB
TypeScript
77 lines
2.1 KiB
TypeScript
"use server";
|
|
|
|
import { executeGraphQL, executeREST } from "app/_lib/zammad";
|
|
import { getTicketOverviewCountsQuery } from "app/_graphql/getTicketOverviewCountsQuery";
|
|
import { getTicketsByOverviewQuery } from "app/_graphql/getTicketsByOverviewQuery";
|
|
|
|
export const getOverviewTicketCountsAction = async () => {
|
|
const countResult = await executeGraphQL({
|
|
query: getTicketOverviewCountsQuery,
|
|
});
|
|
const overviews = countResult?.ticketOverviews?.edges;
|
|
const counts = overviews?.reduce((acc: any, overview: any) => {
|
|
acc[overview.node.name] = overview.node.ticketCount;
|
|
return acc;
|
|
});
|
|
|
|
return counts;
|
|
};
|
|
|
|
export const getOverviewTicketsAction = async (name: string) => {
|
|
let tickets = [];
|
|
let error = null;
|
|
|
|
if (name === "Recent") {
|
|
const recent = await executeREST({ path: "/api/v1/recent_view" });
|
|
|
|
for (const rec of recent) {
|
|
const tkt = await executeREST({
|
|
path: `/api/v1/tickets/${rec.o_id}`,
|
|
});
|
|
tickets.push({
|
|
...tkt,
|
|
internalId: tkt.id,
|
|
createdAt: tkt.created_at,
|
|
updatedAt: tkt.updated_at,
|
|
});
|
|
}
|
|
} else {
|
|
const overviewLookup = {
|
|
Assigned: "My Assigned Tickets",
|
|
Open: "Open Tickets",
|
|
Urgent: "Escalated Tickets",
|
|
Unassigned: "Unassigned & Open Tickets",
|
|
};
|
|
const fullName = overviewLookup[name];
|
|
const countResult = await executeGraphQL({
|
|
query: getTicketOverviewCountsQuery,
|
|
});
|
|
const overviewID = countResult?.ticketOverviews?.edges?.find(
|
|
(overview: any) => overview.node.name === fullName,
|
|
)?.node?.id;
|
|
|
|
console.log({ overviewID });
|
|
|
|
const ticketsResult = await executeGraphQL({
|
|
query: getTicketsByOverviewQuery,
|
|
variables: { overviewId: overviewID, pageSize: 250 },
|
|
});
|
|
|
|
const edges = ticketsResult?.ticketsByOverview?.edges;
|
|
if (edges) {
|
|
tickets = edges.map((edge: any) => edge.node);
|
|
}
|
|
}
|
|
|
|
const sortedTickets = tickets.sort((a: any, b: any) => {
|
|
if (a.internalId < b.internalId) {
|
|
return 1;
|
|
}
|
|
if (a.internalId > b.internalId) {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
});
|
|
|
|
return { tickets: sortedTickets, error };
|
|
};
|