Files
emaui/libs/api/src/lib/query-and-mutation/index.ts
2026-05-29 15:23:46 +03:00

45 lines
1.1 KiB
TypeScript

import { baseApi } from '../base-api';
export type ApiQueryArgs = {
url: string;
method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
params?: Record<string, unknown>;
body?: unknown;
headers?: Record<string, string>;
cacheKey?: string | unknown[];
};
const queryApi = baseApi.injectEndpoints({
endpoints: (builder) => ({
apiQuery: builder.query<unknown, ApiQueryArgs>({
query: ({ url, params }) => ({ url, params }),
}),
apiMutation: builder.mutation<unknown, ApiQueryArgs>({
query: ({ url, method = 'POST', body, headers }) => ({
url,
method,
body,
headers,
}),
}),
}),
overrideExisting: false,
});
export const { useApiQueryQuery, useApiMutationMutation } = queryApi;
export function useApiQuery<TData = unknown>(
args: ApiQueryArgs,
options?: Parameters<typeof useApiQueryQuery>[1],
) {
return useApiQueryQuery(args, options) as ReturnType<typeof useApiQueryQuery> & {
data: TData | undefined;
};
}
export function useApiMutation<TData = unknown>() {
return useApiMutationMutation() as ReturnType<typeof useApiMutationMutation> & {
data: TData | undefined;
};
}