I want my reviews rating option to show only the reviews that are approved manually from db

I have the reviews/Rating system setup working but i want my added Boolean column ‘Aproved’ so determine the reviews displayed on the repeater.

I added a filter to the Reviews Dataset fro this field but it is not working…It bypass that and displays all reviews.

I have tried adding a code on the show rating function but not working even on the initReviews function but i was not successful

Please help me unlock this and if a simple code is needed, please help me with the code.

Herein are the codes for Product page and the Reviews light Box and the filter i applied to the reviews dataset

Please help!

Filter

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() {
 let aproved='aproved';
 // 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('AddReview', 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();
}

light box

//-------------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(); 
    });
});

//-------------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();
}

Hey master @givemeawhisky help me here…

Any Help?

PWhiteRavenH @whiteravenhd

Easy option for you, so you don’t have to overcomplicate things and try to mash up existing code to get it to work or not.

Simply keep this tutorial as it is, however keep it set as admin only access, so basically only you can edit the data in the ratings and reviews etc.
https://support.wix.com/en/article/corvid-tutorial-adding-ratings-and-reviews-to-a-wix-stores-site

Then simply give the user their own ratings and review user input form where they can submit a rating and a review that you can manually approve or by whoever approves your ratings and reviews.

Once that is all done, you can either delete it if not approved or simply add it to the dataset for the ratings and reviews so it will be displayed for all to see.

You can also look at implementing a simple thank you email back to the user when they submit a new rating and review through your user input form which tells them that their input will now be under consideration and if approved will be displayed etc, etc.

This can also be done through a simple hidden text box or lightbox that only appears after the user input form has been submitted.

Then you can also look at doing another simple email back to that user when their rating and review is either approved or not approved etc.

Thank you…
I get you so I should create a new collection Dataset to collect reviews and call it a name like DatasetDataaset togeneralreviews or any other name…so that approving means I will copy individual row to reviews collection which the Ratings Dataset Rating to be displayed?

If it is so, then that means it will be too manual copying from one collection to another and the namings for each dataset has to be the same?

Please advice…
@givemeawhisky

@givemeawhisky

@yisrael-wix Help here sir…a simple issue

Hello @sirvansmo ,

The issue you are facing is because you are already running a filter inside the code, so the filter you are applying to the UI is not gonna work and will be wiped because you are running a filter within the code. Consider adding an additional filter in regards to the boolean field, but in code.

Thanks, sir…let try that, though i wish you could share s simpel code. Thanks Ninja

This worked sir, i really appreciate your assistance sir. Thanks