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:
@@ -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
|
||||||
|
|||||||
+47
-32
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user