82 lines
1.9 KiB
JavaScript
82 lines
1.9 KiB
JavaScript
import apiSlice from './api'
|
|
|
|
export const productApiSlice = apiSlice.injectEndpoints({
|
|
endpoints: builder => ({
|
|
getProducts: builder.query({
|
|
query: ({ category, page_size, page, sort, search, inStock, discount, price }) => {
|
|
const queryParams = new URLSearchParams()
|
|
|
|
Object.entries({
|
|
category,
|
|
page_size,
|
|
page,
|
|
sort,
|
|
search,
|
|
inStock,
|
|
discount,
|
|
price,
|
|
}).forEach(([key, value]) => {
|
|
if (value) queryParams.set(key, value)
|
|
})
|
|
|
|
return {
|
|
url: `/api/products?${queryParams.toString()}`,
|
|
method: 'GET',
|
|
}
|
|
},
|
|
providesTags: result =>
|
|
result
|
|
? [
|
|
...result.data.products.map(({ _id }) => ({
|
|
type: 'Product',
|
|
id: _id,
|
|
})),
|
|
'Product',
|
|
]
|
|
: ['Product'],
|
|
}),
|
|
|
|
getSingleProduct: builder.query({
|
|
query: ({ id }) => ({
|
|
url: `/api/products/${id}`,
|
|
method: 'GET',
|
|
}),
|
|
providesTags: (result, error, arg) => [{ type: 'Product', id: arg.id }],
|
|
}),
|
|
|
|
deleteProduct: builder.mutation({
|
|
query: ({ id }) => ({
|
|
url: `/api/products/${id}`,
|
|
method: 'DELETE',
|
|
}),
|
|
invalidatesTags: ['Product'],
|
|
}),
|
|
|
|
createProduct: builder.mutation({
|
|
query: ({ body }) => ({
|
|
url: `/api/products`,
|
|
method: 'POST',
|
|
body,
|
|
}),
|
|
invalidatesTags: ['Product'],
|
|
}),
|
|
|
|
updateProduct: builder.mutation({
|
|
query: ({ id, body }) => ({
|
|
url: `/api/products/${id}`,
|
|
method: 'PUT',
|
|
body,
|
|
}),
|
|
invalidatesTags: (result, error, arg) => [{ type: 'Product', id: arg.id }],
|
|
}),
|
|
}),
|
|
})
|
|
|
|
export const {
|
|
useDeleteProductMutation,
|
|
useCreateProductMutation,
|
|
useGetProductsQuery,
|
|
useGetSingleProductQuery,
|
|
useUpdateProductMutation,
|
|
} = productApiSlice
|