adminFront/src/api/tickets.ts

111 lines
2.6 KiB
TypeScript
Raw Normal View History

2023-04-20 15:42:18 +00:00
import makeRequest from "@root/kitUI/makeRequest";
2023-04-18 14:30:47 +00:00
import {
GetMessagesRequest,
GetMessagesResponse,
GetTicketsRequest,
GetTicketsResponse,
SendTicketMessageRequest,
} from "@root/model/ticket";
import { authStore } from "@root/stores/auth";
2023-03-20 15:27:01 +00:00
import ReconnectingEventSource from "reconnecting-eventsource";
2023-04-20 15:42:18 +00:00
// const { makeRequest } = authStore();
2023-03-21 12:58:06 +00:00
const supportApiUrl = "https://admin.pena.digital/heruvym";
2023-04-18 14:30:47 +00:00
export function subscribeToAllTickets({
onMessage,
onError,
accessToken,
}: {
accessToken: string;
onMessage: (e: MessageEvent) => void;
onError: (e: Event) => void;
2023-03-20 15:27:01 +00:00
}) {
2023-04-18 14:30:47 +00:00
const url = `${supportApiUrl}/subscribe?Authorization=${accessToken}`;
2023-03-21 12:58:06 +00:00
2023-04-18 14:30:47 +00:00
const eventSource = createEventSource(onMessage, onError, url);
2023-03-20 15:27:01 +00:00
2023-04-18 14:30:47 +00:00
return () => {
eventSource.close();
};
2023-03-21 12:58:06 +00:00
}
2023-04-18 14:30:47 +00:00
export function subscribeToTicketMessages({
onMessage,
onError,
accessToken,
ticketId,
}: {
accessToken: string;
ticketId: string;
onMessage: (e: MessageEvent) => void;
onError: (e: Event) => void;
2023-03-21 12:58:06 +00:00
}) {
2023-04-18 14:30:47 +00:00
const url = `${supportApiUrl}/ticket?ticket=${ticketId}&Authorization=${accessToken}`;
2023-03-20 15:27:01 +00:00
2023-04-18 14:30:47 +00:00
const eventSource = createEventSource(onMessage, onError, url);
2023-03-20 15:27:01 +00:00
2023-04-18 14:30:47 +00:00
return () => {
eventSource.close();
};
2023-03-21 12:58:06 +00:00
}
2023-04-18 14:30:47 +00:00
export async function getTickets({
body,
signal,
}: {
body: GetTicketsRequest;
signal: AbortSignal;
2023-03-21 12:58:06 +00:00
}): Promise<GetTicketsResponse> {
2023-04-18 14:30:47 +00:00
return makeRequest({
url: `${supportApiUrl}/getTickets`,
method: "POST",
useToken: true,
body,
signal,
}).then((response) => {
const result = (response as any).data as GetTicketsResponse;
return result;
});
2023-03-21 12:58:06 +00:00
}
2023-04-18 14:30:47 +00:00
export async function getTicketMessages({
body,
signal,
}: {
body: GetMessagesRequest;
signal: AbortSignal;
2023-03-21 12:58:06 +00:00
}): Promise<GetMessagesResponse> {
2023-04-18 14:30:47 +00:00
return makeRequest({
url: `${supportApiUrl}/getMessages`,
method: "POST",
useToken: true,
body,
signal,
}).then((response) => {
const result = (response as any).data as GetMessagesResponse;
return result;
});
2023-03-21 12:58:06 +00:00
}
2023-04-18 14:30:47 +00:00
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) {
2023-04-18 14:30:47 +00:00
const eventSource = new ReconnectingEventSource(url);
2023-03-29 14:17:00 +00:00
2023-04-18 14:30:47 +00:00
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);
2023-03-29 14:17:00 +00:00
2023-04-18 14:30:47 +00:00
return eventSource;
}