So I am using (https://www.wix.com/code/home/example/Reviews) to allow users to leave a review against a dynamic page.
I have adapted the code to fit my requirements (database) however i am now getting this error
( Wix code SDK Warning: The text parameter that is passed to the text method cannot be set to null or undefined) and the (+ Add A Review) button does not load the light box.
I have looked and looked but cant see the issue any ideas?
Any Ideas please see code under;
import wixWindow from “wix-window”;
import wixData from “wix-data”;
export function addReview_onClick(event) {
let companyId = $w(‘#dynamicDataset’).getCurrentItem()._id;
wixWindow.openLightbox(‘Post a Review’, {id: companyId});
loadReviews(2);
}
function loadReviews(limit) {
let recipe = $w(‘#dynamicDataset’).getCurrentItem();
wixData.query(‘reviews’)
.eq(‘recipeId’, recipe._id)
.find()
.then(res => {
if (res.length > 0) {
renderRating(res.items);
renderReviews(res.items, limit);
$w(‘#numberOfReviews’).text = ${res.length} Reviews
;
$w(‘#numberOfReviews’).show();
if (res.length > 2) {
$w(‘#seeAllReviews’).show();
$w(‘#seeAllLine’).show();
}
}
else {
$w(‘#rating’).hide();
$w(‘#numberOfReviews’).text = ‘No Reviews’;
$w(‘#numberOfReviews’).show();
}
});
}
function renderRating(reviews) {
// compute the average rating
let stats = reviews.reduce((agg, item) => {
return {
sum: agg.sum+item.rating,
count: agg.count+1
};
}, {sum: 0, count: 0});
let rating = Math.round(stats.sum * 2 / stats.count) / 2;
$w('#rating').show();
// setting the rating as HTML to have fine grained control over the formatting
$w('#rating').html = `<p style="font-size:15px; line-height:1.2em; text-align:center"><span class="color_11">
Rating ${rating}
/5
}
function formatDaysAgo(date) {
var ago = new Date().getTime() - date.getTime();
if (ago < 44 * 1000)
return “a few seconds ago”;
else if (ago < 89 * 1000)
return “a minute ago”;
else if (ago < 44 * 60 * 1000)
return Math.round(ago / 60 / 1000) + ’ minutes ago’;
else if (ago < 89 * 60 * 1000)
return “an hour ago”;
else if (ago < 21 * 60 * 60 * 1000)
return Math.round(ago / 60 / 60 / 1000) + ’ hours ago’;
else if (ago < 35 * 60 * 60 * 1000)
return “a day ago”;
else if (ago < 25 * 24 * 60 * 60 * 1000)
return Math.round(ago / 24 / 60 / 60 / 1000) + ’ days ago’;
else if (ago < 45 * 24 * 60 * 60 * 1000)
return ‘a month ago’;
else if (ago < 319 * 24 * 60 * 60 * 1000)
return Math.round(ago / 29 / 24 / 60 / 60 / 1000) + ’ months ago’;
else if (ago < 547 * 24 * 60 * 60 * 1000)
return ‘a year ago’;
else
return Math.round(ago / 365 / 24 / 60 / 60 / 1000) + ’ years ago’;
}
const stars = [‘★’, ‘★★’, ‘★★★’, ‘★★★★’, ‘★★★★★’];
function renderStars(num) {
if (num >= 1 && num <=5)
return stars[num-1];
return stars[0];
}
function makeBrief(about, breakFrom) {
if (!about)
return “”;
var regex = /(<([^>]+)>)/ig;
var plainText = about.replace(regex, “”);
var dotPos = plainText.indexOf(‘.’, breakFrom);
var exclamationPos = plainText.indexOf(‘!’, breakFrom);
var wordBreak = plainText.indexOf(" ", breakFrom);
if (dotPos < 0) dotPos = 500;
if (exclamationPos < 0) exclamationPos = 500;
if (wordBreak < 0) wordBreak = 500;
var lineEnd = Math.min(Math.min(dotPos, exclamationPos), wordBreak);
if (lineEnd !== 500)
return plainText.substring(0, lineEnd) + “…”;
else
return plainText;
}
function renderReview (review) {
return `
${review.name}
${formatDaysAgo(review._createdDate)}
${renderStars(review.rating)}
${makeBrief(review.review, 20)}
`; }const reviewSeparator = ‘
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
’;
const reviewEnd = ‘
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
’;function renderReviews(reviews, limit) {
let reviewsToRender = reviews.slice(0, limit);
let odd = reviewsToRender.filter((element, index, array) => (index % 2 === 1));
let even = reviewsToRender.filter((element, index, array) => (index % 2 === 0));
if (odd.length > 0) {
let oddRendered = odd.map(renderReview).join(reviewSeparator) + reviewEnd;
$w('#reviewsOdd').html = oddRendered;
$w('#reviewsOdd').show();
$w('#oddReviewContainer').show();
}
else {
$w('#reviewsOdd').hide();
$w('#oddReviewContainer').hide();
}
if (even.length > 0) {
let evenRendered = even.map(renderReview).join(reviewSeparator) + reviewEnd;
$w('#reviewsEven').html = evenRendered;
$w('#reviewsEven').show();
$w('#evenReviewContainer').show();
}
else {
$w('#reviewsEven').hide();
$w('#evenReviewContainer').hide();
}
}
export function seeAllReviews_onClick(event) {
loadReviews();
}
export function seeAllReviews_click(event, $w) {
//Add your code for this event here:
}