Skip to content
Snippets Groups Projects
Commit 196b00c3 authored by HARTZ HENRI's avatar HARTZ HENRI
Browse files

feat: add audio response

parent 2d06580d
Branches
1 merge request!137Feature/142 add sound response
Pipeline #325742 passed with stages
in 12 seconds
......@@ -2,6 +2,8 @@ import {TouchableOpacity, Text, StyleSheet, View, Image} from "react-native";
import {ButtonsStyles} from "../../styles/ButtonsStyles";
import {TextsStyles} from "../../styles/TextsStyles";
import React from "react";
import Base64AudioPlayer from "./Base64AudioPlayer";
interface Props{
text: string;
......@@ -9,6 +11,7 @@ interface Props{
buttonStyle?: any;
buttonText?: any;
indicator?: number | undefined;
forceEnd: boolean;
}
/**
......@@ -18,7 +21,7 @@ interface Props{
* @param buttonStyle - Surcharge du style du bouton
* @param buttonText - Surcharge du style du texte du bouton
*/
export default function AnswerButton({text, handleButtonPressed, buttonStyle, buttonText, indicator}: Props){
export default function AnswerButton({text, handleButtonPressed, buttonStyle, buttonText, indicator, forceEnd}: Props){
return(
<View style={styles.containerButton}>
<TouchableOpacity onPress={handleButtonPressed} style={[styles.defaultButton,buttonStyle]}>
......@@ -35,9 +38,9 @@ export default function AnswerButton({text, handleButtonPressed, buttonStyle, bu
/>
:
text.includes('data:audio') ?
<Text style={[TextsStyles.defaultButtonText, buttonText]}>sound: not supported</Text>
<Base64AudioPlayer base64Audio={text} forceEnd={forceEnd}/>
:
<Text style={[TextsStyles.defaultButtonText, buttonText]}>{text}</Text>
<Text style={[TextsStyles.defaultButtonText, buttonText]}>{text}</Text>
}
</TouchableOpacity>
</View>
......
......@@ -11,7 +11,6 @@ import {Answer} from "../../models/Answer";
import {Quiz} from "../../models/Quiz";
import AnswerButton from "../../components/buttons/AnswerButton";
import {QuizInformations} from "../../models/QuizInformations";
import AnswerButtonImage from "../../components/buttons/AnswerButtonImage";
interface Props {
quizInformations?: QuizInformations;
......@@ -71,6 +70,7 @@ export default function PlayingQuizBody({ quizInformations, runId, actualQuestio
const [quizState, setQuizState] = useState(QuizState.ANSWERING);
const [correctAnswerId, setCorrectAnswerId] = useState<number | null>(null);
const [isLastQuestion, setIsLastQuestion] = useState(false);
const [forceEnd, setForceEnd] = useState(false);
const {answerQuestion} = useQuizService();
const getCorrectAnswer = (answers: Answer[]): Answer => {
......@@ -81,6 +81,7 @@ export default function PlayingQuizBody({ quizInformations, runId, actualQuestio
const onValidation = async () => {
if(selectedAnswerId === null) return;
setQuizState(QuizState.LOADING);
setForceEnd(!forceEnd);
const answerId = actualQuestion.answers.find((answer) => answer.id === selectedAnswerId)?.id;
if(!answerId || !runId) return;
const answereFetched = await answerQuestion(runId, actualQuestion.id, answerId);
......@@ -101,7 +102,8 @@ export default function PlayingQuizBody({ quizInformations, runId, actualQuestio
}
};
const onContinue = () => {
const onContinue = async () => {
await setForceEnd(!forceEnd);
if(isLastQuestion) {
navigation.reset({
index: 0,
......@@ -142,6 +144,7 @@ export default function PlayingQuizBody({ quizInformations, runId, actualQuestio
handleButtonPressed={() => onAnsweredButtonClicked(answer.id)}
buttonStyle={getStyleOfAnswerButton(answer.id, selectedAnswerId, correctAnswerId, quizState)}
buttonText={getStyleOfAnswerButtonText(answer.id, selectedAnswerId, correctAnswerId, quizState)}
forceEnd={forceEnd}
/>
))}
</ScrollView>
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment