//step 32 useEffect(() => { //get a list of 3 randomly selected questions if ((props.GameData !== undefined) && (props.GameData.questionAsker.uid === props.auth.uid) && (props.GameData.question === "")) { setSelectedQuestion({ id: -1, text: '' }); setCustomQuestionText(''); const getQuestions = async() => { let someQuestions = []; while (someQuestions.length < 3) { let alreadyPicked = false; let key = firestore().collection("ao-questions").doc().id; let potentialQuestion = ""; let dbQuestion = await firestore().collection("ao-questions").where(firebase.firestore.FieldPath.documentId(), ">=", key).limit(1).get(); if (dbQuestion.size > 0) { dbQuestion.forEach(q => { potentialQuestion = q.data().questionText; }); } else { dbQuestion = await firestore().collection("ao-questions").where(firebase.firestore.FieldPath.documentId(), "<", key).limit(1).get(); dbQuestion.forEach(q => { potentialQuestion = q.data().questionText; }); } someQuestions.forEach(question => { if (question === potentialQuestion) { alreadyPicked = true; } }); if (!alreadyPicked) { someQuestions.push(potentialQuestion); } } setQuestions(someQuestions); } getQuestions(); } }, [props.GameData]); //step 34 const askQuestion = () => { let questionText = ''; if (customQuestionText.length > 0) { questionText = customQuestionText; } else if (selectedQuestion.text.length > 0) { questionText = selectedQuestion.text; } if (questionText.length > 0) { firestore().collection("ao-games").doc(props.GameID).update({ question: questionText, }) .catch(err => { let friendlyError = { friendly: "Something has gone horribly wrong.", technical: err.toString() }; setError(() => { throw friendlyError }); }); } }; //step 36 const addLetter = () => { return firestore().collection("ao-games").doc(props.GameID).update({ answer: props.GameData.answer + selectedLetter, }) .then(response => { let newAnsweringSpirit = getRandomPlayer(); while ((newAnsweringSpirit.uid === props.GameData.answeringSpirit.uid) || (newAnsweringSpirit.uid === props.GameData.questionAsker.uid)) { newAnsweringSpirit = getRandomPlayer(); } updateAnsweringSpirit(newAnsweringSpirit); }) .catch(err => { let friendlyError = { friendly: "Something has gone horribly wrong.", technical: err.toString() }; setError(() => { throw friendlyError }); }); }; //step 37 const updateAnsweringSpirit = newAnsweringSpirit => { return firestore().collection("ao-games").doc(props.GameID).update({ answeringSpirit: newAnsweringSpirit, }) .catch(err => { let friendlyError = { friendly: "Something has gone terribly wrong.", technical: err.toString() }; setError(() => { throw friendlyError }); }); }; //step 38 const finalizeAnswer = () => { let newQuestionAsker = getRandomPlayer(); let newAnsweringSpirit = getRandomPlayer(); while (newQuestionAsker.uid === newAnsweringSpirit.uid) { newQuestionAsker = getRandomPlayer(); } return firestore().collection("ao-games").doc(props.GameID).update({ questionAsker: newQuestionAsker, answeringSpirit: newAnsweringSpirit, question: '', answer: '', }) .catch(err => { let friendlyError = { friendly: "Something has gone terribly wrong.", technical: err.toString() }; setError(() => { throw friendlyError }); }); };