diff --git a/src/components/Course/components/Lesson/Exercise/MarkExerciseModal.svelte b/src/components/Course/components/Lesson/Exercise/MarkExerciseModal.svelte new file mode 100644 index 00000000..e7ba5b2a --- /dev/null +++ b/src/components/Course/components/Lesson/Exercise/MarkExerciseModal.svelte @@ -0,0 +1,53 @@ + + + +

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellendus debitis + quos porro doloremque amet alias modi ducimus delectus cum dolor sunt + laborum provident, deserunt magni facilis non nobis illum ipsum. Lorem ipsum + dolor sit amet, consectetur adipisicing elit. Deleniti rem aliquid, saepe + fuga reiciendis ullam officiis soluta cum, vitae aut eum expedita cumque + perspiciatis pariatur necessitatibus, praesentium ea laudantium ut? +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellendus debitis + quos porro doloremque amet alias modi ducimus delectus cum dolor sunt + laborum provident, deserunt magni facilis non nobis illum ipsum. Lorem ipsum + dolor sit amet, consectetur adipisicing elit. Deleniti rem aliquid, saepe + fuga reiciendis ullam officiis soluta cum, vitae aut eum expedita cumque + perspiciatis pariatur necessitatibus, praesentium ea laudantium ut? +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellendus debitis + quos porro doloremque amet alias modi ducimus delectus cum dolor sunt + laborum provident, deserunt magni facilis non nobis illum ipsum. Lorem ipsum + dolor sit amet, consectetur adipisicing elit. Deleniti rem aliquid, saepe + fuga reiciendis ullam officiis soluta cum, vitae aut eum expedita cumque + perspiciatis pariatur necessitatibus, praesentium ea laudantium ut? +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellendus debitis + quos porro doloremque amet alias modi ducimus delectus cum dolor sunt + laborum provident, deserunt magni facilis non nobis illum ipsum. Lorem ipsum + dolor sit amet, consectetur adipisicing elit. Deleniti rem aliquid, saepe + fuga reiciendis ullam officiis soluta cum, vitae aut eum expedita cumque + perspiciatis pariatur necessitatibus, praesentium ea laudantium ut? +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellendus debitis + quos porro doloremque amet alias modi ducimus delectus cum dolor sunt + laborum provident, deserunt magni facilis non nobis illum ipsum. Lorem ipsum + dolor sit amet, consectetur adipisicing elit. Deleniti rem aliquid, saepe + fuga reiciendis ullam officiis soluta cum, vitae aut eum expedita cumque + perspiciatis pariatur necessitatibus, praesentium ea laudantium ut? +

+
diff --git a/src/components/Course/components/Lesson/Exercise/Preview.svelte b/src/components/Course/components/Lesson/Exercise/Preview.svelte new file mode 100644 index 00000000..009eec10 --- /dev/null +++ b/src/components/Course/components/Lesson/Exercise/Preview.svelte @@ -0,0 +1,52 @@ + + +{#each questions as currentQuestion, currentQuestionIndex} + {#if QUESTION_TYPE.RADIO === currentQuestion.type} + + {:else if QUESTION_TYPE.CHECKBOX === currentQuestion.type} + + {:else if QUESTION_TYPE.TEXTAREA === currentQuestion.type} + + {/if} +{/each} diff --git a/src/components/Course/components/Lesson/Exercise/ViewMode.svelte b/src/components/Course/components/Lesson/Exercise/ViewMode.svelte index dae1f702..e6a681ab 100644 --- a/src/components/Course/components/Lesson/Exercise/ViewMode.svelte +++ b/src/components/Course/components/Lesson/Exercise/ViewMode.svelte @@ -1,6 +1,7 @@ - - -{#if !preview && questions.length && !$userQuestionniareAnswers.isFinished} - +{#if !preview && questions.length && !$questionnaireMetaData.isFinished} + {/if} {#if preview} - {#each questions as currentQuestion, currentQuestionIndex} - {#if QUESTION_TYPE.RADIO === currentQuestion.type} - - {:else if QUESTION_TYPE.CHECKBOX === currentQuestion.type} - - {:else if QUESTION_TYPE.TEXTAREA === currentQuestion.type} - - {/if} - {/each} + {:else if !questions.length}
Edit button to add.
-{:else if $userQuestionniareAnswers.currentQuestionIndex === 0} +{:else if $questionnaireMetaData.currentQuestionIndex === 0}

{title}

{description}

@@ -212,18 +116,18 @@ type="button" />
-{:else if $userQuestionniareAnswers.isFinished} +{:else if $questionnaireMetaData.isFinished}

{title}

- {#if STATUS.IN_PROGRESS === $userQuestionniareAnswers.status} + {#if STATUS.IN_PROGRESS === $questionnaireMetaData.status} Pending - {:else if STATUS.REVIEWED === $userQuestionniareAnswers.status && getTotalScores() > 0} + {:else if STATUS.REVIEWED === $questionnaireMetaData.status && getTotalScores() > 0}
- {#each questions as currentQuestion, currentQuestionIndex} - {#if QUESTION_TYPE.RADIO === currentQuestion.type} - - {:else if QUESTION_TYPE.CHECKBOX === currentQuestion.type} - - {:else if QUESTION_TYPE.TEXTAREA === currentQuestion.type} - - {/if} - {/each} + {:else if QUESTION_TYPE.RADIO === currentQuestion.type} {:else if QUESTION_TYPE.CHECKBOX === currentQuestion.type} diff --git a/src/components/Course/components/Lesson/Exercise/functions.js b/src/components/Course/components/Lesson/Exercise/functions.js new file mode 100644 index 00000000..41677f20 --- /dev/null +++ b/src/components/Course/components/Lesson/Exercise/functions.js @@ -0,0 +1,72 @@ +import { QUESTION_TYPE } from '../../../../Question/constants'; + +export function wasCorrectAnswerSelected(currentQuestion, answers) { + if (currentQuestion.type === QUESTION_TYPE.TEXTAREA) { + return true; + } + + const answer = answers[currentQuestion.id]; + const formattedAnswers = typeof answer === 'string' ? [answer] : answer; + return ( + formattedAnswers && + formattedAnswers.some((answer) => { + if ( + !currentQuestion.answers || + !currentQuestion.answers.length || + currentQuestion.answers.includes(answer) + ) { + return true; + } + + return false; + }) + ); +} + +export function getPropsForQuestion( + questions, + question, + questionnaireMetaData, + questionIndex, + onSubmit, + onPrevious, + preview +) { + const { answers, isFinished } = questionnaireMetaData; + + const isLast = questionIndex === questions.length; + const isOpenQuesiton = question.type === QUESTION_TYPE.TEXTAREA; + + return { + title: questionIndex + '. ' + question.title, + name: `${question.id}`, + options: question.options, + answers: question.answers, + code: question.code, + defaultValue: isOpenQuesiton + ? answers[question.id] || '' + : answers[question.id] || [], + onSubmit, + onPrevious, + disablePreviousButton: questionIndex === 1, + isLast, + isPreview: preview || isFinished, + disabled: + (isFinished && wasCorrectAnswerSelected(question, answers)) || isFinished, + nextButtonProps: isOpenQuesiton + ? { + label: 'Next', + isActive: true, + } + : wasCorrectAnswerSelected(question, answers) + ? { + label: isLast ? 'Finish' : 'Next', + isActive: true, + disableOptionSelect: true, + } + : { + label: 'Check', + isActive: false, + }, + }; +} diff --git a/src/components/Course/components/Lesson/Exercise/index.svelte b/src/components/Course/components/Lesson/Exercise/index.svelte index 362690d5..8e5b798b 100644 --- a/src/components/Course/components/Lesson/Exercise/index.svelte +++ b/src/components/Course/components/Lesson/Exercise/index.svelte @@ -1,5 +1,6 @@ diff --git a/src/components/Course/components/Lesson/Exercise/store/answers.js b/src/components/Course/components/Lesson/Exercise/store/answers.js index 68dee86d..8f2210e2 100644 --- a/src/components/Course/components/Lesson/Exercise/store/answers.js +++ b/src/components/Course/components/Lesson/Exercise/store/answers.js @@ -2,7 +2,7 @@ import { writable } from 'svelte/store'; import { STATUS } from '../constants'; -// export const userQuestionniareAnswers = writable({ +// export const questionnaireMetaData = writable({ // answers: {}, // scores: { gates: 60 }, // currentQuestionIndex: 5, @@ -19,4 +19,4 @@ const initAnswerState = { status: STATUS.IN_PROGRESS, }; -export const userQuestionniareAnswers = writable(initAnswerState); +export const questionnaireMetaData = writable(initAnswerState); diff --git a/src/components/Course/components/Lesson/Exercise/store/index.js b/src/components/Course/components/Lesson/Exercise/store/index.js index 9b1ab5a2..6b487537 100644 --- a/src/components/Course/components/Lesson/Exercise/store/index.js +++ b/src/components/Course/components/Lesson/Exercise/store/index.js @@ -19,7 +19,7 @@ export function handleAddQuestion() { ...questions, { ...QUESTION_TEMPLATE, - id: questions.length + 1, + id: `${questions.length + 1}-form`, value: '', answers: [], options: [ diff --git a/src/components/Course/components/Navigation/index.svelte b/src/components/Course/components/Navigation/index.svelte index 31a1def2..a7b6c528 100644 --- a/src/components/Course/components/Navigation/index.svelte +++ b/src/components/Course/components/Navigation/index.svelte @@ -20,7 +20,7 @@ export let courseId; export let path; - let show = true; + let show = null; const { page } = stores(); @@ -70,6 +70,8 @@ } onMount(() => { + show = localStorage.getItem('hideCourseNav') === 'false'; + hotkeys('b', function (event, handler) { event.preventDefault(); switch (handler.key) { @@ -79,6 +81,12 @@ } }); }); + + $: { + if (process.browser && show !== null) { + localStorage.setItem('hideCourseNav', `${!show}`); + } + }
diff --git a/src/components/Form/Checkbox.svelte b/src/components/Form/Checkbox.svelte index b8f8cd63..763cbb0e 100644 --- a/src/components/Form/Checkbox.svelte +++ b/src/components/Form/Checkbox.svelte @@ -5,10 +5,11 @@ export let name; export let isEditable = false; export let disabled = false; + export let className = '';