useReview composable
useReview composable allows loading and adding product reviews.
API
useReview composable returns the following properties:
search- function that fetches reviews for the product matching the provided filters.loadCustomerReviews- function that fetches product reviews created by the current customer.loadReviewMetadata- function that fetches additional product reviews data.addReview- function that submits a new product review.error- ref that contains an errors from the composable methods.loading- ref that contains information whether any of the composable methods is loading.
Interfaces
/**
* Almost every method is extending this type
*/
type ComposableFunctionArgs<T> = T & {
customQuery?: CustomQuery;
customHeaders?: CustomHeaders;
};
interface UseReviewErrors {
search: Error;
addReview: Error;
loadReviewMetadata: Error;
loadCustomerReviews: Error;
}
interface CreateProductReviewInput {
/** The customer's nickname. Defaults to the customer name, if logged in */
nickname: Scalars['String'];
/** Ratings details by category. e.g price: 5, quality: 4 etc */
ratings: Array<InputMaybe<ProductReviewRatingInput>>;
/** The SKU of the reviewed product */
sku: Scalars['String'];
/** The summary (title) of the review */
summary: Scalars['String'];
/** The review text. */
text: Scalars['String'];
/** The reCaptcha Token. */
recaptchaToken?: Scalars['String'];
}
type GetProductSearchParams = {
search?: string;
filter?: ProductAttributeFilterInput;
pageSize?: number;
currentPage?: number;
sort?: ProductAttributeSortInput;
configurations?: string[];
};
type UseReviewSearchParams = ComposableFunctionArgs<GetProductSearchParams>;
type UseReviewAddReviewParams = ComposableFunctionArgs<CreateProductReviewInput>;
interface UseReviewInterface {
search(params: UseReviewSearchParams): Promise<ProductReviewQuery['products']['items'] | []>;
loadCustomerReviews(): Promise<CustomerProductReviewQuery['customer'] | {}>;
loadReviewMetadata(params?: ComposableFunctionArgs<{}>): Promise<ProductReviewRatingsMetadataQuery['productReviewRatingsMetadata']['items'] | []>;
addReview(params: UseReviewAddReviewParams): Promise<CreateProductReviewMutation['createProductReview']['review'] | {}>;
loading: Readonly<Ref<boolean>>;
error: Readonly<Ref<UseReviewErrors>>;
}
reviewGetters
reviewGetters is a set of helper functions that can be used to get data from the review object. They receive review object as a parameter and return the data from it.
getAverageRating- returns the average rating of the reviewgetItems- returns the review itemsgetRatesCount- returns an object with the rates count:rate- returns the ratecount- returns the count
getReviewAuthor- returns the review author stringgetReviewDate- returns the review dategetReviewId- returns the review idgetReviewMessage- returns the review messagegetReviewMetadata- returns the review metadata object:name- returns the namevalues- returns the value:id- returns the idlabel- returns the label
id- returns the id
getReviewRating- returns the review rating numbergetReviewsPage- returns the reviews page numbergetTotalReviews- returns the total reviews numbergetProductName- returns the product name
reviewGetters usage
import reviewGetters from '~/modules/review/getters/reviewGetters';
const productName = reviewGetters.getProductName(review);
const reviewAuthor = reviewGetters.getReviewAuthor(review);
const reviewMessage = reviewGetters.getReviewMessage(review);
Example
Fetch product reviews and get review items:
import useReview from '~/composables';
import reviewGetters from '~/modules/review/getters/reviewGetters';
import { usePageStore } from '~/stores/page';
setup() {
const { routeData } = usePageStore();
const { search, addReview } = useReview();
const reviews = ref(null);
const getSearchQuery = {
filter: {
sku: {
eq: routeData.sku,
},
},
};
const fetchReviews = async (query = getSearchQuery) => {
const productReviews = await search(query);
const baseReviews = Array.isArray(productReviews)
? productReviews[0]
: productReviews;
reviews.value = reviewGetters.getItems(baseReviews);
};
}