Hi, all!
I'm adding a rating and reviews to my wix store product page.
I have a lot of it figured out but I receive this error message for the js:
$w('#SubmitReviews').setFilter is not a function. (In '$w('#SubmitReviews').setFilter(external_wix_data_default().filter().eq('productId', product._id))', '$w('#SubmitReviews').setFilter' is undefined)
What does this mean and what should I do now?
Also, here's the product page code:
//-------------Imports-------------// import wixData from 'wix-data'; import wixWindow from 'wix-window'; //-------------Global Variables-------------// // Current product. let product; //-------------Page Setup-------------// $w.onReady(async function () { // Set the global product variable to the currently displayed product. product = await $w('#productPage1').getProduct(); // Load the current product's reviews using the initReviews() function. initReviews(); }); // Loads the current product's reviews. async function initReviews() { // Filter the "Reviews" dataset to contain only the reviews on the currently displayed product. await $w('#Reviews').setFilter(wixData.filter().eq('productId', product._id)); // Show the reviews after the filter was set and applied on the dataset showReviews(); // Load the current product's statistics using the loadStatistics() function. loadStatistics(); } // Load the current product's statistics. async function loadStatistics() { // Get the statistics data based on the current product's ID. const stats = await wixData.get('review-stats', product._id); // If statistics data for the product was found: if (stats) { // Compute the product's average rating by dividing the total points by the number of ratings. let avgRating = (Math.round(stats.rating * 10 / stats.count) / 10); // Compute the percentage of reviewers that recommend the product. let percentRecommended = Math.round(stats.recommended / stats.count * 100); // Get the ratings element. let ratings = $w('#generalRatings'); // Set the ratings element's average rating to the value calculated above. ratings.rating = avgRating; // Set the ratings element's number of ratings to the count value from the statistics data. ratings.numRatings = stats.count; // Set the text for the recommended percentage element. $w('#recoPercent').text = `${percentRecommended} % would recommend`; // Show the ratings element. $w('#generalRatings').show(); // If there is no statistics data for the product: } else { // Set the text for the recommended percentage element to reflect the fact that there are no reviews. $w('#recoPercent').text = 'There are no reviews yet'; } // Show the recommended percentage element only after it is populated to avoid flickering. $w('#recoPercent').show(); } //-------------Repeater Setup -------------// // Set up each item in the reivews repeater as it is loaded. export function reviewsRepeater_itemReady($w, itemData, index) { // If the reviewer recommends the item: if (itemData.recommends) { // Set the "recommend text. $w('#recommendation').text = 'I recommend this product.'; // If the reviewer does not recommend the item: } else { // Set the "don't recomend" text. $w('#recommendation').text = "I don't recommend this product."; } // If a photo was uploaded for the review: if (itemData.photo) { // Set the image URL from the item data. $w('#reviewImage').src = itemData.photo; // Expand the image. $w('#reviewImage').expand(); } // Set the ratings element's rating value. $w('#oneRating').rating = itemData.rating; // Get the date that the review was entered. let date = itemData._createdDate; // Format the date according to the date format settings on the user's computer. $w('#submissionTime').text = date.toLocaleString(); } //-------------Data Setup -------------// // Perform some setup when the dataset filter was completed. export function showReviews() { // If at least one review has been submitted: if ($w('#Reviews').getTotalCount() > 0) { // Expand the strip that displays the reviews. $w('#reviewsStrip').expand(); // If there are no reviews: } else { // Collapse the strip that displays the reviews. $w('#reviewsStrip').collapse(); //otherwise, hide it } } //-------------Event Handlers -------------// // Set the action that occurs when a user clicks the "Write a Review" button. export async function addReview_click(event, $w) { // Create an object containing the current product's ID to be sent to the review writing lightbox. const dataForLightbox = { productId: product._id }; // Open the "Review Box" lightbox, send it the object created above, and wait for it to close. let result = await wixWindow.openLightbox('Review Box', dataForLightbox); // After the review lightbox is closed, refresh the reviews dataset so the new review appears on the page. $w('#SubmitReviews').refresh(); // Reload the current products statistics to reflect the new rating. loadStatistics(); // Show a thank you message. $w('#thankYouMessage').show(); } // Set the action that occurs when a user clicks the "Load More" text. export function resultsPages_click(event, $w) { // Load additional reviews into the reviews repeater. $w('#Reviews').loadMore(); }
This is the page. If you google the title, you should find it pretty easily! =)
I've got the URL to the Velo Tutorial page but am not allowed to post it here in the forum per admin rules.