61 lines
2.0 KiB
JavaScript
61 lines
2.0 KiB
JavaScript
import { baseApi } from "./baseApi";
|
|
|
|
export const collectionsApi = baseApi.injectEndpoints({
|
|
endpoints: (builder) => ({
|
|
getCollections: builder.query({
|
|
query: () => `/collections`,
|
|
}),
|
|
|
|
getCollectionById: builder.query({
|
|
query: (collectionId) => `/collections/${collectionId}`,
|
|
}),
|
|
|
|
getCollectionProducts: builder.query({
|
|
query: (collectionId) => `/collections/${collectionId}/products`,
|
|
transformResponse: (response) => {
|
|
return {
|
|
data: response.data || [],
|
|
isEmpty: !response.data || response.data.length === 0,
|
|
};
|
|
},
|
|
}),
|
|
|
|
checkCollectionHasProducts: builder.query({
|
|
query: (collectionId) => `/collections/${collectionId}/products?limit=1`,
|
|
transformResponse: (response) => {
|
|
return {
|
|
hasProducts: response.data && response.data.length > 0,
|
|
};
|
|
},
|
|
}),
|
|
|
|
getCollectionProductsPaginated: builder.query({
|
|
query: ({ collectionId, page = 1, limit = 6, brands, min_price, max_price, sorting }) => {
|
|
const params = new URLSearchParams();
|
|
params.append('page', page);
|
|
if (limit) params.append('limit', limit);
|
|
if (brands) params.append('brands', brands);
|
|
if (min_price) params.append('min_price', min_price);
|
|
if (max_price) params.append('max_price', max_price);
|
|
if (sorting) params.append('sorting', sorting);
|
|
|
|
return `/collections/${collectionId}/products?${params.toString()}`;
|
|
},
|
|
transformResponse: (response) => ({
|
|
data: response.data || [],
|
|
pagination: response.pagination || {},
|
|
isEmpty: !response.data || response.data.length === 0,
|
|
}),
|
|
}),
|
|
}),
|
|
});
|
|
|
|
export const {
|
|
useGetCollectionsQuery,
|
|
useGetCollectionByIdQuery,
|
|
useGetCollectionProductsQuery,
|
|
useCheckCollectionHasProductsQuery,
|
|
useGetCollectionProductsPaginatedQuery,
|
|
useLazyGetCollectionProductsPaginatedQuery,
|
|
useLazyCheckCollectionHasProductsQuery,
|
|
} = collectionsApi; |