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

90 lines
2.1 KiB
JavaScript

import apiSlice from './api'
export const reviewApiSlice = apiSlice.injectEndpoints({
endpoints: builder => ({
getReviewsList: builder.query({
query: ({ page }) => ({
url: `/api/reviews/list?page=${page}`,
method: 'GET',
}),
providesTags: result =>
result
? [
...result.data.reviews.map(({ _id }) => ({
type: 'Review',
id: _id,
})),
'Review',
]
: ['Review'],
}),
getReviews: builder.query({
query: ({ page }) => ({
url: `/api/reviews?page=${page}`,
method: 'GET',
}),
}),
createReview: builder.mutation({
query: ({ body }) => ({
url: `/api/reviews`,
method: 'POST',
body,
}),
invalidatesTags: ['Review'],
}),
getProductReviews: builder.query({
query: ({ id, page }) => ({
url: `/api/reviews/product/${id}?page=${page}&page_size=5`,
method: 'GET',
}),
providesTags: result =>
result
? [
...result.data.reviews.map(({ _id }) => ({
type: 'Review',
id: _id,
})),
'Review',
]
: ['Review'],
}),
getSingleReview: builder.query({
query: ({ id }) => ({
url: `/api/reviews/${id}`,
method: 'GET',
}),
providesTags: (result, err, arg) => [{ type: 'Review', id: arg.id }],
}),
deleteReview: builder.mutation({
query: ({ id }) => ({
url: `/api/reviews/${id}`,
method: 'DELETE',
}),
invalidatesTags: ['Review'],
}),
editReview: builder.mutation({
query: ({ id, body }) => ({
url: `/api/reviews/${id}`,
method: 'PATCH',
body,
}),
invalidatesTags: (result, err, arg) => [{ type: 'Review', id: arg.id }],
}),
}),
})
export const {
useGetReviewsQuery,
useGetSingleReviewQuery,
useDeleteReviewMutation,
useGetProductReviewsQuery,
useEditReviewMutation,
useCreateReviewMutation,
useGetReviewsListQuery,
} = reviewApiSlice