Hi!
We are a not-for-profit looking to add a fun quiz for the campers to figure out what type of "Engineer" they are. How can I modify the "Corvid Tutorial: Adding a Gift Quiz to a Wix Stores Site", to provide the desired output?
1. I have created a database for engineerKeywords (two columns: keywords and linked image)
2. I have linked engineerKeywords to my Team database (containing image, title, description, etc.)
3. I have 5 slides of questions and want the results slide, a repeater, to display the engineer(s).
Should be very easy but the simplicity of Corvid combined with the complexity of Covid is turning my brain to mush.
import wixData from 'wix-data';
const selectedAnswers = [];
const quizAnswersIds = ["people", "environment",
"cities", "technology", "tiktok" ,"vsco", "instagram",
"snapchat", "land", "sea", "air", "low", "medium",
"high", "introvert", "extrovert"];
let numberOfSlides;
$w.onReady(function () {
numberOfSlides = $w('#quizSlides').slides.length;
quizAnswersIds.forEach(answer => {
$w(`#${answer}`).onClick(() => {
selectedAnswers.push(answer);
$w('#quizSlides').next();
})
})
});
export async function quizSlides_change(event, $w) {
if (isQuizFinished()) {
let quizEngineers = await getKeywordsPerEngineer();
selectedAnswers.forEach(answer => {
quizEngineers = filterEngineerPerAnswer(quizEngineers, answer);
});
quizEngineers = quizEngineers.map(quizEngineer => quizEngineer.engineerId);
quizEngineers = getRandomItemsFromArray(quizEngineers, numberOfSlides);
$w('#recommendedEngineer').data = await getEngineerData(quizEngineers);
}
}
function isQuizFinished() {
return $w('#quizSlides').currentIndex === numberOfSlides - 1;
}
async function getKeywordsPerEngineer() {
let engineerKeywords = await wixData.query("engineerKeywords").find();
engineerKeywords = engineerKeywords.items;
engineerKeywords = engineerKeywords.map(item => {
return {
engineerId: item.engineer,
keywords: item.keywords.split(",")
}
});
return engineerKeywords;
}
function filterEngineerPerAnswer(engineerProducts, answer) {
const filteredEngineers = engineerProducts.filter(quizEngineer => {
return quizEngineer.keywords.includes(answer)
});
return filteredEngineers;
}
function getRandomItemsFromArray(engineersArr, numberOfItems){
const engineersIds = [];
let numberOfEngineers = engineersArr.length;
for (let i = 0; i < numberOfItems && i < numberOfEngineers; i++){
const randomIndex = getRandomInt(0, engineersArr.length -1 );
engineersIds.push(engineersArr[randomIndex]);
engineersArr.splice(randomIndex, 1);
}
return engineersIds;
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
async function getEngineerData(engineersIds) {
const engineersData = await wixData.query("Team")
.hasSome("_id", engineersIds)
.find();
return engineersData.items;
}
export function recommendedEngineer_itemReady_1($item, itemData, index) {
$item('#name').text = itemData.name;
$item('#image').src = itemData.mainMedia;
$item('#description').text = itemData.description;
}
Thank you very much!😀