feat: Auto move to the next question (#324)

* move to the next question

* remove console

* minor changes

* updated the confetti timeout

* updated the button

---------

Co-authored-by: Rotimi Best <[email protected]>
This commit is contained in:
Em_Dev
2024-05-23 06:17:35 +01:00
committed by GitHub
co-authored by Rotimi Best
parent 0536463ec9
commit 57e3b63588
7 changed files with 56 additions and 39 deletions
@@ -124,7 +124,7 @@
</form> </form>
</Modal> </Modal>
<div class="w-full"> <div class="w-full mb-20">
{#if Object.values(errors).length} {#if Object.values(errors).length}
<div class="w-full flex justify-center mb-4"> <div class="w-full flex justify-center mb-4">
<ErrorMessage <ErrorMessage
@@ -14,7 +14,7 @@
import { removeDuplicate } from '$lib/utils/functions/removeDuplicate'; import { removeDuplicate } from '$lib/utils/functions/removeDuplicate';
import { QUESTION_TYPE } from '$lib/components/Question/constants'; import { QUESTION_TYPE } from '$lib/components/Question/constants';
import { STATUS } from './constants'; import { STATUS } from './constants';
import { getPropsForQuestion, filterOutDeleted } from './functions'; import { getPropsForQuestion, filterOutDeleted, wasCorrectAnswerSelected } from './functions';
import { formatAnswers, getGroupMemberId } from '$lib/components/Course/function'; import { formatAnswers, getGroupMemberId } from '$lib/components/Course/function';
import { submitExercise } from '$lib/utils/services/courses'; import { submitExercise } from '$lib/utils/services/courses';
import { import {
@@ -166,7 +166,7 @@
handleSubmit({ preventDefault: () => {} }); handleSubmit({ preventDefault: () => {} });
} }
async function onSubmit(id, value, moveToNextQuestion = false) { async function onSubmit(id, value) {
if ($course.type === COURSE_TYPE.SELF_PACED) { if ($course.type === COURSE_TYPE.SELF_PACED) {
isLoading = true; isLoading = true;
} }
@@ -183,47 +183,62 @@
[id]: formattedAnswer [id]: formattedAnswer
}; };
if (moveToNextQuestion) { const isCorrect = wasCorrectAnswerSelected(currentQuestion, $questionnaireMetaData.answers);
$questionnaireMetaData.currentQuestionIndex += 1; console.log({ isCorrect });
localStorage.setItem(
`autosave-exercise-${exerciseId}`,
JSON.stringify($questionnaireMetaData)
);
}
const isFinished = !questions[$questionnaireMetaData.currentQuestionIndex - 1]; const isFinished = !questions[$questionnaireMetaData.currentQuestionIndex];
console.log(`isFinished`, isFinished); console.log(`isFinished`, isFinished);
console.log( console.log(
`$questionnaireMetaData.currentQuestionIndex`, `$questionnaireMetaData.currentQuestionIndex`,
$questionnaireMetaData.currentQuestionIndex $questionnaireMetaData.currentQuestionIndex
); );
// If last question send to server if (isCorrect) {
if (isFinished) { setTimeout(async () => {
localStorage.removeItem(`autosave-exercise-${exerciseId}`); $questionnaireMetaData.currentQuestionIndex += 1;
$questionnaireMetaData.status = 1; localStorage.setItem(
$questionnaireMetaData.totalPossibleGrade = getTotalPossibleGrade($questionnaire.questions); `autosave-exercise-${exerciseId}`,
$questionnaireMetaData.grades = {}; JSON.stringify($questionnaireMetaData)
);
$questionnaireMetaData.comment = ''; // If last question send to server
let response = await submitExercise( if (isFinished) {
$questionnaireMetaData.answers, localStorage.removeItem(`autosave-exercise-${exerciseId}`);
questions, $questionnaireMetaData.status = 1;
exerciseId, $questionnaireMetaData.totalPossibleGrade = getTotalPossibleGrade(
$course.id, $questionnaire.questions
getGroupMemberId($group.people, $profile.id) );
); $questionnaireMetaData.grades = {};
if (response) {
submissionResponse = response;
submissionId = submissionResponse.submission[0]?.id;
}
if ($course.type === COURSE_TYPE.SELF_PACED) { $questionnaireMetaData.comment = '';
automaticGrading($questionnaireMetaData, $questionnaire.questions); let response = await submitExercise(
} $questionnaireMetaData.answers,
questions,
exerciseId,
$course.id,
getGroupMemberId($group.people, $profile.id)
);
if (response) {
submissionResponse = response;
submissionId = submissionResponse.submission[0]?.id;
}
notifyEducator(); if ($course.type === COURSE_TYPE.SELF_PACED) {
automaticGrading($questionnaireMetaData, $questionnaire.questions);
}
notifyEducator();
}
}, 1000);
} }
// if (moveToNextQuestion) {
// $questionnaireMetaData.currentQuestionIndex += 1;
// localStorage.setItem(
// `autosave-exercise-${exerciseId}`,
// JSON.stringify($questionnaireMetaData)
// );
// }
} }
function onPrevious() { function onPrevious() {
@@ -26,7 +26,7 @@ export function wasCorrectAnswerSelected(currentQuestion, answers, isFinished) {
if (isCorrect && !isFinished) { if (isCorrect && !isFinished) {
toggleConfetti(); toggleConfetti();
setTimeout(toggleConfetti, 1500); setTimeout(toggleConfetti, 100);
} }
return isCorrect; return isCorrect;
@@ -80,7 +80,8 @@ export function getPropsForQuestion(
? { ? {
label: isLast ? 'Finish' : 'Next', label: isLast ? 'Finish' : 'Next',
isActive: true, isActive: true,
disableOptionSelect: true disableOptionSelect: true,
isDisabled: isLast ? false : true // Disable Next button because auto next is enabled
} }
: { : {
label: 'Check', label: 'Check',
@@ -46,7 +46,7 @@
function handleFormSubmit(event) { function handleFormSubmit(event) {
if (isPreview) return; if (isPreview) return;
const values = getVal(event.target, name); const values = getVal(event.target, name);
onSubmit(name, values, nextButtonProps.isActive); onSubmit(name, values);
event.target.reset(); event.target.reset();
} }
@@ -135,6 +135,7 @@
variant={nextButtonProps.isActive ? VARIANTS.CONTAINED : VARIANTS.OUTLINED} variant={nextButtonProps.isActive ? VARIANTS.CONTAINED : VARIANTS.OUTLINED}
type="submit" type="submit"
label={nextButtonProps.label} label={nextButtonProps.label}
isDisabled={nextButtonProps.isDisabled}
{name} {name}
/> />
</div> </div>
@@ -48,7 +48,7 @@
function handleFormSubmit(event) { function handleFormSubmit(event) {
if (isPreview) return; if (isPreview) return;
const value = getRadioVal(event.target, name); const value = getRadioVal(event.target, name);
onSubmit(name, [value], nextButtonProps.isActive); onSubmit(name, [value]);
event.target.reset(); event.target.reset();
} }
@@ -136,6 +136,7 @@
variant={nextButtonProps.isActive ? VARIANTS.CONTAINED : VARIANTS.OUTLINED} variant={nextButtonProps.isActive ? VARIANTS.CONTAINED : VARIANTS.OUTLINED}
type="submit" type="submit"
label={nextButtonProps.label} label={nextButtonProps.label}
isDisabled={nextButtonProps.isDisabled}
{name} {name}
/> />
</div> </div>
@@ -32,7 +32,7 @@
function handleFormSubmit(event) { function handleFormSubmit(event) {
if (isPreview) return; if (isPreview) return;
onSubmit(name, defaultValue, true); onSubmit(name, defaultValue);
// event.target.reset(); // event.target.reset();
} }
@@ -29,7 +29,6 @@
let hasFetched = false; let hasFetched = false;
async function getCourses(userId: string | undefined, orgId: string) { async function getCourses(userId: string | undefined, orgId: string) {
console.log({ org: $currentOrg });
if (cantFetch && typeof cantFetch === 'boolean' && orgId && !hasFetched) { if (cantFetch && typeof cantFetch === 'boolean' && orgId && !hasFetched) {
// only show is loading when fetching for the first time // only show is loading when fetching for the first time
if (!$courses.length) { if (!$courses.length) {