So i have followed the tutorial:
i have opened the editor and copied everything over to my site exactly.
However i get an error that it cant fetch the info i need from my product page to carry over to the review form.
I have checked my product databse and the products arent saved as ‘productId’ they are ‘inventoryitems’. i think this may be the issue?
Here is my code for the product page:
//-------------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( ‘inventoryItem’ , 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 = {
inventoryItem: 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( ‘#Reviews’ ).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();
}
Here is my lightbox Code:
//-------------Imports-------------//
import  wixWindow  from  ‘wix-window’ ;
import  wixData  from  ‘wix-data’ ;
//-------------Global Variables-------------//
// Current product’s ID.
let  productId;
//-------------Lightbox Setup-------------//
$w.onReady( function  () {
// Get the data passed by the page that opened the lightbox.
productId = wixWindow.lightbox.getContext().productId;
// Set the action that occurs before the review is saved.
$w( ‘#SubmitReviews’ ).onBeforeSave(() => {
// If no rating was set:
if  ($w( ‘#radioRating’ ).value ===  ‘’ ) {
// Display an error message.
$w( ‘#rateError’ ).show();
// Force the save to fail.
return  Promise.reject();
}
// If a rating was set, set the element values into the fields of the dataset item.
// These values will be saved in the collection.
$w( ‘#SubmitReviews’ ).setFieldValues({
productId,
rating: $w( ‘#radioRating’ ).value,
recommends: $w( ‘#radioGroup1’ ).value
});
});
// Set the action that occurs after the review is saved.
$w( ‘#SubmitReviews’ ).onAfterSave( async  () => {
// Update the product’s statistics using the updateStatistics() function.
await  updateStatistics($w( ‘#radioGroup1’ ).value);
// When the statistics have been updated, close the lightbox to return the user to the product page.
wixWindow.lightbox.close();
});
});
// Update (or create) the product statistics.
async function  updateStatistics(isRecommended) {
// Get the review statistics for the current product from the “review-stats” collection.
let  stats =  await  wixData.get( ‘review-stats’ , productId);
// If statistics data already exist for this product:
if  (stats) {
// Add the new rating to the total rating points.
stats.rating += parseInt($w( ‘#radioRating’ ).value,  10 );
// Increase the ratings count by 1.
stats.count +=  1 ;
// Increase the recommendations by one if the user recommends the product.
stats.recommended += (isRecommended ===  “true” ) ?  1  :  0 ;
// Update the new product statistics in the “review-stats” collection.
return  wixData.update( ‘review-stats’ , stats)
}
//If no statistics data exists for this product, create a new statistics item.
stats = {
// Set the statistics item’s ID to the current product’s ID.
_id: productId,
// Set the statistics item’s rating to the rating entered by the user.
rating: parseInt($w( ‘#radioRating’ ).value,  10 ),
// Set the statistics item’s ratings count to 1 because this is the first rating.
count:  1 ,
// Set the statistics item’s recommended property to 1 if the user recommends the product.
recommended: (isRecommended ===  “true” ) ?  1  :  0
};
// Insert the new product statistics item into the “review-stats” collection.
return  wixData.insert( ‘review-stats’ , stats)
}
//-------------Event Handlers-------------//
// Set the action that occurs when a rating is chosen.
export function  radioRating_change(event, $w) {
// Hide the error message.
$w( ‘#rateError’ ).hide();
}
Here is the error i am getting:
I just wish to get it working then im thinking of re-doing my store using repeaters then i can link to a star rating under each product somehow??
Or somebody do it for me and i will pay you :):):):)
Thanks
Matt
