adminFront/src/api/tickets.ts

89 lines
2.6 KiB
TypeScript
Raw Normal View History

2023-03-21 12:58:06 +00:00
import makeRequest from "@root/kitUI/makeRequest";
import { GetMessagesRequest, GetMessagesResponse, GetTicketsRequest, GetTicketsResponse, SendTicketMessageRequest } from "@root/model/ticket";
2023-03-20 15:27:01 +00:00
import ReconnectingEventSource from "reconnecting-eventsource";
2023-03-21 12:58:06 +00:00
const supportApiUrl = "https://admin.pena.digital/heruvym";
2023-03-20 15:27:01 +00:00
export function subscribeToAllTickets({ onMessage, onError, accessToken }: {
accessToken: string;
onMessage: (e: MessageEvent) => void;
onError: (e: Event) => void;
}) {
2023-03-21 12:58:06 +00:00
const url = `${supportApiUrl}/subscribe?Authorization=${accessToken}`;
2023-03-29 14:17:00 +00:00
const eventSource = createEventSource(onMessage, onError, url);
2023-03-20 15:27:01 +00:00
2023-03-21 12:58:06 +00:00
return () => {
eventSource.close();
};
}
export function subscribeToTicketMessages({ onMessage, onError, accessToken, ticketId }: {
accessToken: string;
ticketId: string;
onMessage: (e: MessageEvent) => void;
onError: (e: Event) => void;
}) {
const url = `${supportApiUrl}/ticket?ticket=${ticketId}&Authorization=${accessToken}`;
2023-03-20 15:27:01 +00:00
2023-03-29 14:17:00 +00:00
const eventSource = createEventSource(onMessage, onError, url);
2023-03-20 15:27:01 +00:00
return () => {
eventSource.close();
};
2023-03-21 12:58:06 +00:00
}
export async function getTickets({ body, signal }: {
body: GetTicketsRequest;
signal: AbortSignal;
}): Promise<GetTicketsResponse> {
return makeRequest({
url: `${supportApiUrl}/getTickets`,
method: "POST",
useToken: true,
body,
signal,
}).then(response => {
const result = (response as any).data as GetTicketsResponse;
return result;
});
}
export async function getTicketMessages({ body, signal }: {
body: GetMessagesRequest;
signal: AbortSignal;
}): Promise<GetMessagesResponse> {
return makeRequest({
url: `${supportApiUrl}/getMessages`,
method: "POST",
useToken: true,
body,
signal,
}).then(response => {
const result = (response as any).data as GetMessagesResponse;
return result;
});
}
export async function sendTicketMessage({ body }: {
body: SendTicketMessageRequest;
}) {
return makeRequest({
url: `${supportApiUrl}/send`,
method: "POST",
useToken: true,
body,
});
2023-03-29 14:17:00 +00:00
}
function createEventSource(onMessage: (e: MessageEvent) => void, onError: (e: Event) => void, url: string) {
const eventSource = new ReconnectingEventSource(url);
eventSource.addEventListener("open", () => console.log(`EventSource connected with ${url}`));
eventSource.addEventListener("close", () => console.log(`EventSource closed with ${url}`));
eventSource.addEventListener("message", onMessage);
eventSource.addEventListener("error", onError);
return eventSource;
2023-03-20 15:27:01 +00:00
}