Files
queueful/frontend/app/src/slice/QueueApi.ts
2024-04-22 00:48:39 +03:00

57 lines
1.4 KiB
TypeScript

import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
import { baseUrl } from "../config/baseUrl";
import { RootState } from "../config/store";
export type CreateQueueRequest = {
name: string;
description: string | null;
};
export type Queue = {
id: string;
name: string;
description: string | null;
};
export const QueueApi = createApi({
reducerPath: "QueueApi",
baseQuery: fetchBaseQuery({
baseUrl: `${baseUrl}/queue`,
prepareHeaders: (headers, { getState }) => {
const token = (getState() as RootState).auth.token;
if (token) {
headers.set("authorization", `Bearer ${token}`);
}
const clientID = (getState() as RootState).auth.clientId;
if (clientID) {
headers.set("X-Client-Id", clientID);
}
return headers;
},
}),
endpoints: (builder) => ({
getQueues: builder.query({
query: () => "/",
}),
getQueueDetail: builder.query({
query: (queueId: string | undefined) => `/${queueId}`,
}),
joinQueue: builder.mutation({
query: (queueId: string) => `/${queueId}/join`,
}),
createQueue: builder.mutation({
query: (data: CreateQueueRequest) => ({
url: "/",
method: "POST",
body: data,
}),
}),
}),
});
export const {
useGetQueuesQuery,
useGetQueueDetailQuery,
useCreateQueueMutation,
} = QueueApi;