redhare-demo/store/services/product.service.js

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